From 3605aa5e4de4093103b8e1b9836b51dfd462f5f4 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 27 Jun 2016 10:57:54 -0400 Subject: [PATCH 01/23] Re-Adds Instability --- code/__DEFINES/genetics.dm | 2 + code/game/dna/genes/disabilities.dm | 70 +++--- code/game/dna/genes/gene.dm | 9 +- code/game/dna/genes/goon_disabilities.dm | 207 ++++++++--------- code/game/dna/genes/goon_powers.dm | 225 ++++++++++--------- code/game/dna/genes/powers.dm | 132 ++++++----- code/game/dna/genes/vg_disabilities.dm | 33 +-- code/game/dna/genes/vg_powers.dm | 36 ++- code/modules/mob/living/carbon/human/life.dm | 7 +- 9 files changed, 379 insertions(+), 342 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index e6988ca745e..5e04d288764 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -124,3 +124,5 @@ #define NUTRITION_LEVEL_HUNGRY 250 #define NUTRITION_LEVEL_STARVING 150 +//Used for calculations for negative effects of having genetics powers +#define DEFAULT_GENE_INSTABILITY -4 diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index f62268b621a..cb2ab29dae0 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -35,7 +35,7 @@ if(sdisability) M.sdisabilities|=sdisability if(activation_message) - to_chat(M, "\red [activation_message]") + to_chat(M, "[activation_message]") else testing("[name] has no activation message.") @@ -47,7 +47,7 @@ if(sdisability) M.sdisabilities &= ~sdisability if(deactivation_message) - to_chat(M, "\red [deactivation_message]") + to_chat(M, "[deactivation_message]") else testing("[name] has no deactivation message.") @@ -55,86 +55,95 @@ name="Hallucinate" activation_message="Your mind says 'Hello'." deactivation_message ="Sanity returns. Or does it?" + instability = -2 mutation=HALLUCINATE - New() - block=HALLUCINATIONBLOCK +/datum/dna/gene/disability/hallucinate/New() + block=HALLUCINATIONBLOCK /datum/dna/gene/disability/epilepsy name="Epilepsy" activation_message="You get a headache." deactivation_message ="Your headache is gone, at last." + instability = -2 disability=EPILEPSY - New() - block=EPILEPSYBLOCK +/datum/dna/gene/disability/epilepsy/New() + block=EPILEPSYBLOCK /datum/dna/gene/disability/cough name="Coughing" activation_message="You start coughing." deactivation_message ="Your throat stops aching." + instability = -1 disability=COUGHING - New() - block=COUGHBLOCK +/datum/dna/gene/disability/cough/New() + block=COUGHBLOCK /datum/dna/gene/disability/clumsy name="Clumsiness" activation_message="You feel lightheaded." deactivation_message ="You regain some control of your movements" + instability = -2 mutation=CLUMSY - New() - block=CLUMSYBLOCK +/datum/dna/gene/disability/clumsy/New() + block=CLUMSYBLOCK /datum/dna/gene/disability/tourettes name="Tourettes" activation_message="You twitch." deactivation_message ="Your mouth tastes like soap." + instability = -1 disability=TOURETTES - New() - block=TWITCHBLOCK +/datum/dna/gene/disability/tourettes/New() + block=TWITCHBLOCK /datum/dna/gene/disability/nervousness name="Nervousness" activation_message="You feel nervous." deactivation_message ="You feel much calmer." + instability = -1 disability=NERVOUS - New() - block=NERVOUSBLOCK +/datum/dna/gene/disability/nervousness/New() + block=NERVOUSBLOCK /datum/dna/gene/disability/blindness name="Blindness" activation_message="You can't seem to see anything." deactivation_message ="You can see now, in case you didn't notice..." + instability = -5 sdisability=BLIND - New() - block=BLINDBLOCK +/datum/dna/gene/disability/blindness/New() + block=BLINDBLOCK /datum/dna/gene/disability/deaf name="Deafness" activation_message="It's kinda quiet." deactivation_message ="You can hear again!" + instability = -4 sdisability=DEAF - New() - block=DEAFBLOCK +/datum/dna/gene/disability/deaf/New() + block=DEAFBLOCK - activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.ear_deaf = 1 +/datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.ear_deaf = 1 /datum/dna/gene/disability/nearsighted name="Nearsightedness" activation_message="Your eyes feel weird..." deactivation_message ="You can see clearly now" + instability = -3 disability=NEARSIGHTED - New() - block=GLASSESBLOCK +/datum/dna/gene/disability/nearsighted/New() + block=GLASSESBLOCK /datum/dna/gene/disability/lisp @@ -142,14 +151,15 @@ desc = "I wonder wath thith doeth." activation_message = "Thomething doethn't feel right." deactivation_message = "You now feel able to pronounce consonants." + instability = -1 mutation = LISP - New() - ..() - block=LISPBLOCK +/datum/dna/gene/disability/lisp/New() + ..() + block=LISPBLOCK - OnSay(var/mob/M, var/message) - return replacetext(message,"s","th") +/datum/dna/gene/disability/lisp/OnSay(var/mob/M, var/message) + return replacetext(message,"s","th") /datum/dna/gene/disability/comic name = "Comic" @@ -158,5 +168,5 @@ deactivation_message = "Well thank god that's over with." mutation=COMIC - New() - block = COMICBLOCK +/datum/dna/gene/disability/comic/New() + block = COMICBLOCK diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm index a56be88082e..ad2b1f43c54 100644 --- a/code/game/dna/genes/gene.dm +++ b/code/game/dna/genes/gene.dm @@ -23,7 +23,10 @@ // Any of a number of GENE_ flags. var/flags=0 -/** + // Chance of the gene to cause adverse effects when active + var/instability=0 + +/* * Is the gene active in this mob's DNA? */ /datum/dna/gene/proc/is_active(var/mob/M) @@ -113,10 +116,10 @@ M.mutations.Add(mutation) if(activation_messages.len) var/msg = pick(activation_messages) - to_chat(M, "\blue [msg]") + to_chat(M, "[msg]") /datum/dna/gene/basic/deactivate(var/mob/M) M.mutations.Remove(mutation) if(deactivation_messages.len) var/msg = pick(deactivation_messages) - to_chat(M, "\red [msg]") + to_chat(M, "[msg]") diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm index 1cb70e2c236..5fa8d6bb10c 100644 --- a/code/game/dna/genes/goon_disabilities.dm +++ b/code/game/dna/genes/goon_disabilities.dm @@ -12,14 +12,15 @@ desc = "Completely shuts down the speech center of the subject's brain." activation_message = "You feel unable to express yourself at all." deactivation_message = "You feel able to speak freely again." + instability = -3 sdisability = MUTE - New() - ..() - block=MUTEBLOCK +/datum/dna/gene/disability/mute/New() + ..() + block=MUTEBLOCK - OnSay(var/mob/M, var/message) - return "" +/datum/dna/gene/disability/mute/OnSay(var/mob/M, var/message) + return "" //////////////////////////////////////// // Harmful to others as well as self @@ -30,24 +31,25 @@ desc = "The subject suffers from constant radiation sickness and causes the same on nearby organics." activation_message = "You feel a strange sickness permeate your whole body." deactivation_message = "You no longer feel awful and sick all over." + instability = -6 mutation = RADIOACTIVE - New() - ..() - block=RADBLOCK +/datum/dna/gene/disability/radioactive/New() + ..() + block=RADBLOCK - OnMobLife(var/mob/living/owner) - var/radiation_amount = abs(min(owner.radiation - 20,0)) - owner.apply_effect(radiation_amount, IRRADIATE) - for(var/mob/living/L in range(1, owner)) - if(L == owner) - continue - to_chat(L, "You are enveloped by a soft green glow emanating from [owner].") - L.apply_effect(5, IRRADIATE) - return +/datum/dna/gene/disability/radioactive/OnMobLife(var/mob/living/owner) + var/radiation_amount = abs(min(owner.radiation - 20,0)) + owner.apply_effect(radiation_amount, IRRADIATE) + for(var/mob/living/L in range(1, owner)) + if(L == owner) + continue + to_chat(L, "You are enveloped by a soft green glow emanating from [owner].") + L.apply_effect(5, IRRADIATE) + return - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "rads[fat]_s" +/datum/dna/gene/disability/radioactive/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "rads[fat]_s" //////////////////////////////////////// // Other disabilities @@ -59,12 +61,12 @@ desc = "Greatly slows the subject's metabolism, enabling greater buildup of lipid tissue." activation_message = "You feel blubbery and lethargic!" deactivation_message = "You feel fit!" - + instability = -2 mutation = OBESITY - New() - ..() - block=FATBLOCK +/datum/dna/gene/disability/fat/New() + ..() + block=FATBLOCK // WAS: /datum/bioEffect/chav /datum/dna/gene/disability/speech/chav @@ -72,38 +74,39 @@ desc = "Forces the language center of the subject's brain to construct sentences in a more rudimentary manner." activation_message = "Ye feel like a reet prat like, innit?" deactivation_message = "You no longer feel like being rude and sassy." + instability = -1 mutation = CHAV - New() - ..() - block=CHAVBLOCK +/datum/dna/gene/disability/speech/chav/New() + ..() + block=CHAVBLOCK - OnSay(var/mob/M, var/message) - // THIS ENTIRE THING BEGS FOR REGEX - message = replacetext(message,"dick","prat") - message = replacetext(message,"comdom","knob'ead") - message = replacetext(message,"looking at","gawpin' at") - message = replacetext(message,"great","bangin'") - message = replacetext(message,"man","mate") - message = replacetext(message,"friend",pick("mate","bruv","bledrin")) - message = replacetext(message,"what","wot") - message = replacetext(message,"drink","wet") - message = replacetext(message,"get","giz") - message = replacetext(message,"what","wot") - message = replacetext(message,"no thanks","wuddent fukken do one") - message = replacetext(message,"i don't know","wot mate") - message = replacetext(message,"no","naw") - message = replacetext(message,"robust","chin") - message = replacetext(message," hi ","how what how") - message = replacetext(message,"hello","sup bruv") - message = replacetext(message,"kill","bang") - message = replacetext(message,"murder","bang") - message = replacetext(message,"windows","windies") - message = replacetext(message,"window","windy") - message = replacetext(message,"break","do") - message = replacetext(message,"your","yer") - message = replacetext(message,"security","coppers") - return message +/datum/dna/gene/disability/speech/chav/OnSay(var/mob/M, var/message) + // THIS ENTIRE THING BEGS FOR REGEX + message = replacetext(message,"dick","prat") + message = replacetext(message,"comdom","knob'ead") + message = replacetext(message,"looking at","gawpin' at") + message = replacetext(message,"great","bangin'") + message = replacetext(message,"man","mate") + message = replacetext(message,"friend",pick("mate","bruv","bledrin")) + message = replacetext(message,"what","wot") + message = replacetext(message,"drink","wet") + message = replacetext(message,"get","giz") + message = replacetext(message,"what","wot") + message = replacetext(message,"no thanks","wuddent fukken do one") + message = replacetext(message,"i don't know","wot mate") + message = replacetext(message,"no","naw") + message = replacetext(message,"robust","chin") + message = replacetext(message," hi ","how what how") + message = replacetext(message,"hello","sup bruv") + message = replacetext(message,"kill","bang") + message = replacetext(message,"murder","bang") + message = replacetext(message,"windows","windies") + message = replacetext(message,"window","windy") + message = replacetext(message,"break","do") + message = replacetext(message,"your","yer") + message = replacetext(message,"security","coppers") + return message // WAS: /datum/bioEffect/swedish /datum/dna/gene/disability/speech/swedish @@ -111,18 +114,19 @@ desc = "Forces the language center of the subject's brain to construct sentences in a vaguely norse manner." activation_message = "You feel Swedish, however that works." deactivation_message = "The feeling of Swedishness passes." + instability = -1 mutation = SWEDISH - New() - ..() - block=SWEDEBLOCK +/datum/dna/gene/disability/speech/swedish/New() + ..() + block=SWEDEBLOCK - OnSay(var/mob/M, var/message) - // svedish - message = replacetext(message,"w","v") - if(prob(30)) - message += " Bork[pick("",", bork",", bork, bork")]!" - return message +/datum/dna/gene/disability/speech/swedish/OnSay(var/mob/M, var/message) + // svedish + message = replacetext(message,"w","v") + if(prob(30)) + message += " Bork[pick("",", bork",", bork, bork")]!" + return message // WAS: /datum/bioEffect/unintelligable /datum/dna/gene/disability/unintelligable @@ -130,34 +134,35 @@ desc = "Heavily corrupts the part of the brain responsible for forming spoken sentences." activation_message = "You can't seem to form any coherent thoughts!" deactivation_message = "Your mind feels more clear." + instability = -1 mutation = SCRAMBLED - New() - ..() - block=SCRAMBLEBLOCK +/datum/dna/gene/disability/unintelligable/New() + ..() + block=SCRAMBLEBLOCK - OnSay(var/mob/M, var/message) - var/prefix=copytext(message,1,2) - if(prefix == ";") - message = copytext(message,2) - else if(prefix in list(":","#")) - prefix += copytext(message,2,3) - message = copytext(message,3) - else - prefix="" +/datum/dna/gene/disability/unintelligable/OnSay(var/mob/M, var/message) + var/prefix=copytext(message,1,2) + if(prefix == ";") + message = copytext(message,2) + else if(prefix in list(":","#")) + prefix += copytext(message,2,3) + message = copytext(message,3) + else + prefix="" - var/list/words = splittext(message," ") - var/list/rearranged = list() - for(var/i=1;i<=words.len;i++) - var/cword = pick(words) - words.Remove(cword) - var/suffix = copytext(cword,length(cword)-1,length(cword)) - while(length(cword)>0 && suffix in list(".",",",";","!",":","?")) - cword = copytext(cword,1 ,length(cword)-1) - suffix = copytext(cword,length(cword)-1,length(cword) ) - if(length(cword)) - rearranged += cword - return "[prefix][uppertext(jointext(rearranged," "))]!!" + var/list/words = splittext(message," ") + var/list/rearranged = list() + for(var/i=1;i<=words.len;i++) + var/cword = pick(words) + words.Remove(cword) + var/suffix = copytext(cword,length(cword)-1,length(cword)) + while(length(cword)>0 && suffix in list(".",",",";","!",":","?")) + cword = copytext(cword,1 ,length(cword)-1) + suffix = copytext(cword,length(cword)-1,length(cword) ) + if(length(cword)) + rearranged += cword + return "[prefix][uppertext(jointext(rearranged," "))]!!" // WAS: /datum/bioEffect/toxic_farts /datum/dna/gene/disability/toxic_farts @@ -165,12 +170,11 @@ desc = "Causes the subject's digestion to create a significant amount of noxious gas." activation_message = "Your stomach grumbles unpleasantly." deactivation_message = "Your stomach stops acting up. Phew!" - mutation = TOXIC_FARTS - New() - ..() - block=TOXICFARTBLOCK +/datum/dna/gene/disability/toxic_farts/New() + ..() + block=TOXICFARTBLOCK ////////////////// // USELESS SHIT // @@ -183,12 +187,11 @@ desc = "Enhances the subject's ability to build and retain heavy muscles." activation_message = "You feel buff!" deactivation_message = "You feel wimpy and weak." - mutation = STRONG - New() - ..() - block=STRONGBLOCK +/datum/dna/gene/disability/strong/New() + ..() + block=STRONGBLOCK // WAS: /datum/bioEffect/horns /datum/dna/gene/disability/horns @@ -198,12 +201,12 @@ deactivation_message = "Your horns crumble away into nothing." mutation = HORNS - New() - ..() - block=HORNSBLOCK +/datum/dna/gene/disability/horns/New() + ..() + block=HORNSBLOCK - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "horns_s" +/datum/dna/gene/disability/horns/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "horns_s" //////////////////////////////////////////////////////////////////////// // WAS: /datum/bioEffect/immolate @@ -216,9 +219,9 @@ spelltype=/obj/effect/proc_holder/spell/targeted/immolate - New() - ..() - block = IMMOLATEBLOCK +/datum/dna/gene/basic/grant_spell/immolate/New() + ..() + block = IMMOLATEBLOCK /obj/effect/proc_holder/spell/targeted/immolate name = "Incendiary Mitochondria" @@ -241,6 +244,6 @@ /obj/effect/proc_holder/spell/targeted/immolate/cast(list/targets) var/mob/living/carbon/L = usr L.adjust_fire_stacks(0.5) - L.visible_message("\red [L.name] suddenly bursts into flames!") + L.visible_message("[L.name] suddenly bursts into flames!") L.IgniteMob() playsound(L.loc, 'sound/effects/bamf.ogg', 50, 0) diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index c50c04860cf..7cc0731e3bb 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -8,8 +8,8 @@ mutation=SOBER - New() - block=SOBERBLOCK +/datum/dna/gene/basic/sober/New() + block=SOBERBLOCK //WAS: /datum/bioEffect/psychic_resist /datum/dna/gene/basic/psychic_resist @@ -20,24 +20,26 @@ mutation=PSY_RESIST - New() - block=PSYRESISTBLOCK +/datum/dna/gene/basic/psychic_resist/New() + block=PSYRESISTBLOCK ///////////////////////// // Stealth Enhancers ///////////////////////// /datum/dna/gene/basic/stealth - can_activate(var/mob/M, var/flags) - // Can only activate one of these at a time. - if(is_type_in_list(/datum/dna/gene/basic/stealth,M.active_genes)) - testing("Cannot activate [type]: /datum/dna/gene/basic/stealth in M.active_genes.") - return 0 - return ..(M,flags) + instability = 4 - deactivate(var/mob/M) - ..(M) - M.alpha=255 +/datum/dna/gene/basic/stealth/can_activate(var/mob/M, var/flags) + // Can only activate one of these at a time. + if(is_type_in_list(/datum/dna/gene/basic/stealth,M.active_genes)) + testing("Cannot activate [type]: /datum/dna/gene/basic/stealth in M.active_genes.") + return 0 + return ..(M,flags) + +/datum/dna/gene/basic/stealth/deactivate(var/mob/M) + ..(M) + M.alpha=255 // WAS: /datum/bioEffect/darkcloak /datum/dna/gene/basic/stealth/darkcloak @@ -48,23 +50,23 @@ activation_prob=10 mutation = CLOAK - New() - block=SHADOWBLOCK +/datum/dna/gene/basic/stealth/darkcloak/New() + block=SHADOWBLOCK - OnMobLife(var/mob/M) - var/turf/simulated/T = get_turf(M) - if(!istype(T)) - return - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - var/light_available - if(L) - light_available = L.get_clamped_lum()*10 - else - light_available = 5 - if(light_available <= 2) - M.alpha = round(M.alpha * 0.8) - else - M.alpha = 255 +/datum/dna/gene/basic/stealth/darkcloak/OnMobLife(var/mob/M) + var/turf/simulated/T = get_turf(M) + if(!istype(T)) + return + var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T + var/light_available + if(L) + light_available = L.get_clamped_lum()*10 + else + light_available = 5 + if(light_available <= 2) + M.alpha = round(M.alpha * 0.8) + else + M.alpha = 255 //WAS: /datum/bioEffect/chameleon /datum/dna/gene/basic/stealth/chameleon @@ -75,43 +77,43 @@ activation_prob=10 mutation = CHAMELEON - New() +/datum/dna/gene/basic/stealth/chameleon/New() block=CHAMELEONBLOCK - OnMobLife(var/mob/M) - if((world.time - M.last_movement) >= 30 && !M.stat && M.canmove && !M.restrained()) - M.alpha -= 25 - else - M.alpha = round(255 * 0.80) +/datum/dna/gene/basic/stealth/chameleon/OnMobLife(var/mob/M) + if((world.time - M.last_movement) >= 30 && !M.stat && M.canmove && !M.restrained()) + M.alpha -= 25 + else + M.alpha = round(255 * 0.80) ///////////////////////////////////////////////////////////////////////////////////////// /datum/dna/gene/basic/grant_spell var/obj/effect/proc_holder/spell/spelltype - activate(var/mob/M, var/connected, var/flags) - M.AddSpell(new spelltype(M)) - ..() - return 1 +/datum/dna/gene/basic/grant_spell/activate(var/mob/M, var/connected, var/flags) + M.AddSpell(new spelltype(M)) + ..() + return 1 - deactivate(var/mob/M, var/connected, var/flags) - for(var/obj/effect/proc_holder/spell/S in M.spell_list) - if(istype(S,spelltype)) - M.spell_list.Remove(S) - ..() - return 1 +/datum/dna/gene/basic/grant_spell/deactivate(var/mob/M, var/connected, var/flags) + for(var/obj/effect/proc_holder/spell/S in M.spell_list) + if(istype(S,spelltype)) + M.spell_list.Remove(S) + ..() + return 1 /datum/dna/gene/basic/grant_verb var/verbtype - activate(var/mob/M, var/connected, var/flags) - ..() - M.verbs += verbtype - return 1 +/datum/dna/gene/basic/grant_verb/activate(var/mob/M, var/connected, var/flags) + ..() + M.verbs += verbtype + return 1 - deactivate(var/mob/M, var/connected, var/flags) - ..() - M.verbs -= verbtype +/datum/dna/gene/basic/grant_verb/deactivate(var/mob/M, var/connected, var/flags) + ..() + M.verbs -= verbtype // WAS: /datum/bioEffect/cryokinesis /datum/dna/gene/basic/grant_spell/cryo @@ -119,13 +121,14 @@ desc = "Allows the subject to lower the body temperature of others." activation_messages = list("You notice a strange cold tingle in your fingertips.") deactivation_messages = list("Your fingers feel warmer.") + instability = 4 mutation = CRYO spelltype = /obj/effect/proc_holder/spell/targeted/cryokinesis - New() - ..() - block = CRYOBLOCK +/datum/dna/gene/basic/grant_spell/cryo/New() + ..() + block = CRYOBLOCK /obj/effect/proc_holder/spell/targeted/cryokinesis name = "Cryokinesis" @@ -153,11 +156,11 @@ var/mob/living/carbon/C = targets[1] if(!iscarbon(C)) - to_chat(usr, "\red This will only work on normal organic beings.") + to_chat(usr, "This will only work on normal organic beings.") return if (RESIST_COLD in C.mutations) - C.visible_message("\red A cloud of fine ice crystals engulfs [C.name], but disappears almost instantly!") + C.visible_message("A cloud of fine ice crystals engulfs [C.name], but disappears almost instantly!") return var/handle_suit = 0 if(ishuman(C)) @@ -166,12 +169,12 @@ if(istype(H.wear_suit, /obj/item/clothing/suit/space)) handle_suit = 1 if(H.internal) - H.visible_message("\red [usr] sprays a cloud of fine ice crystals, engulfing [H]!", + H.visible_message("[usr] sprays a cloud of fine ice crystals, engulfing [H]!", "[usr] sprays a cloud of fine ice crystals over your [H.head]'s visor.") log_admin("[key_name(usr)] has used cryokinesis on [key_name(C)] while wearing internals and a suit") msg_admin_attack("[key_name_admin(usr)] has cast cryokinesis on [key_name_admin(C)]") else - H.visible_message("\red [usr] sprays a cloud of fine ice crystals engulfing, [H]!", + H.visible_message("[usr] sprays a cloud of fine ice crystals engulfing, [H]!", "[usr] sprays a cloud of fine ice crystals cover your [H.head]'s visor and make it into your air vents!.") log_admin("[key_name(usr)] has used cryokinesis on [key_name(C)]") msg_admin_attack("[key_name_admin(usr)] has cast cryokinesis on [key_name_admin(C)]") @@ -200,12 +203,12 @@ desc = "" //layer = 15 - New(var/atom/location, var/icon/I, var/duration = 20, var/oname = "something") - src.name = oname - loc=location - src.icon = I - spawn(duration) - qdel(src) +/obj/effect/self_deleting/New(var/atom/location, var/icon/I, var/duration = 20, var/oname = "something") + src.name = oname + loc=location + src.icon = I + spawn(duration) + qdel(src) /////////////////////////////////////////////////////////////////////////////////////////// @@ -215,13 +218,14 @@ desc = "Allows the subject to eat just about anything without harm." activation_messages = list("You feel hungry.") deactivation_messages = list("You don't feel quite so hungry anymore.") + instability = 2 mutation = EATER spelltype=/obj/effect/proc_holder/spell/targeted/eat - New() - ..() - block = EATBLOCK +/datum/dna/gene/basic/grant_spell/mattereater/New() + ..() + block = EATBLOCK /obj/effect/proc_holder/spell/targeted/eat name = "Eat" @@ -356,13 +360,14 @@ //cooldown = 30 activation_messages = list("Your leg muscles feel taut and strong.") deactivation_messages = list("Your leg muscles shrink back to normal.") + instability = 2 mutation = JUMPY spelltype =/obj/effect/proc_holder/spell/targeted/leap - New() - ..() - block = JUMPBLOCK +/datum/dna/gene/basic/grant_spell/jumpy/New() + ..() + block = JUMPBLOCK /obj/effect/proc_holder/spell/targeted/leap name = "Jump" @@ -383,12 +388,10 @@ /obj/effect/proc_holder/spell/targeted/leap/cast(list/targets) var/failure = 0 if (istype(usr.loc,/mob/) || usr.lying || usr.stunned || usr.buckled || usr.stat) - to_chat(usr, "\red You can't jump right now!") + to_chat(usr, "You can't jump right now!") return if (istype(usr.loc,/turf/)) - - if(usr.restrained())//Why being pulled while cuffed prevents you from moving for(var/mob/M in range(usr, 1)) if(M.pulling == usr) @@ -400,12 +403,12 @@ if(usr.pinned.len) failure = 1 - usr.visible_message("\red [usr.name] takes a huge leap!") + usr.visible_message("[usr.name] takes a huge leap!") playsound(usr.loc, 'sound/weapons/thudswoosh.ogg', 50, 1) if(failure) usr.Weaken(5) usr.Stun(5) - usr.visible_message(" \the [usr] attempts to leap away but is slammed back down to the ground!", + usr.visible_message("[usr] attempts to leap away but is slammed back down to the ground!", "You attempt to leap away but are suddenly slammed back down to the ground!", "You hear the flexing of powerful muscles and suddenly a crash as a body hits the floor.") return 0 @@ -422,7 +425,7 @@ usr.flying = prevFlying if (FAT in usr.mutations && prob(66)) - usr.visible_message("\red [usr.name] crashes due to their heavy weight!") + usr.visible_message("[usr.name] crashes due to their heavy weight!") //playsound(usr.loc, 'zhit.wav', 50, 1) usr.AdjustWeakened(10) usr.AdjustStunned(5) @@ -431,10 +434,10 @@ if (istype(usr.loc,/obj/)) var/obj/container = usr.loc - to_chat(usr, "\red You leap and slam your head against the inside of [container]! Ouch!") + to_chat(usr, "You leap and slam your head against the inside of [container]! Ouch!") usr.AdjustParalysis(3) usr.AdjustWeakened(5) - container.visible_message("\red [usr.loc] emits a loud thump and rattles a bit.") + container.visible_message("[usr.loc] emits a loud thump and rattles a bit.") playsound(usr.loc, 'sound/effects/bang.ogg', 50, 1) var/wiggle = 6 while(wiggle > 0) @@ -460,11 +463,12 @@ //cooldown = 1800 activation_messages = list("You don't feel entirely like yourself somehow.") deactivation_messages = list("You feel secure in your identity.") + instability = 3 mutation = POLYMORPH - New() - ..() - block = POLYMORPHBLOCK +/datum/dna/gene/basic/grant_spell/polymorph/New() + ..() + block = POLYMORPHBLOCK /obj/effect/proc_holder/spell/targeted/polymorph name = "Polymorph" @@ -483,13 +487,13 @@ /obj/effect/proc_holder/spell/targeted/polymorph/cast(list/targets) var/mob/living/M=targets[1] if(!ishuman(M)) - to_chat(usr, "\red You can only change your appearance to that of another human.") + to_chat(usr, "You can only change your appearance to that of another human.") return if(!ishuman(usr)) return - usr.visible_message("\red [usr]'s body shifts and contorts.") + usr.visible_message("[usr]'s body shifts and contorts.") spawn(10) if(M && usr) @@ -510,11 +514,12 @@ spelltype = /obj/effect/proc_holder/spell/targeted/empath activation_messages = list("You suddenly notice more about others than you did before.") deactivation_messages = list("You no longer feel able to sense intentions.") + instability = 1 mutation=EMPATH - New() - ..() - block = EMPATHBLOCK +/datum/dna/gene/basic/grant_spell/empath/New() + ..() + block = EMPATHBLOCK /obj/effect/proc_holder/spell/targeted/empath name = "Read Mind" @@ -544,21 +549,21 @@ for(var/mob/living/carbon/M in targets) if(!iscarbon(M)) - to_chat(usr, "\red You may only use this on other organic beings.") + to_chat(usr, "You may only use this on other organic beings.") return if (PSY_RESIST in M.mutations) - to_chat(usr, "\red You can't see into [M.name]'s mind at all!") + to_chat(usr, "You can't see into [M.name]'s mind at all!") return if (M.stat == 2) - to_chat(usr, "\red [M.name] is dead and cannot have their mind read.") + to_chat(usr, "[M.name] is dead and cannot have their mind read.") return if (M.health < 0) - to_chat(usr, "\red [M.name] is dying, and their thoughts are too scrambled to read.") + to_chat(usr, "[M.name] is dying, and their thoughts are too scrambled to read.") return - to_chat(usr, "\blue Mind Reading of [M.name]:") + to_chat(usr, "Mind Reading of [M.name]:") var/pain_condition = M.health // lower health means more pain var/list/randomthoughts = list("what to have for lunch","the future","the past","money", @@ -575,33 +580,33 @@ switch(pain_condition) if (81 to INFINITY) - to_chat(usr, "\blue Condition: [M.name] feels good.") + to_chat(usr, "Condition: [M.name] feels good.") if (61 to 80) - to_chat(usr, "\blue Condition: [M.name] is suffering mild pain.") + to_chat(usr, "Condition: [M.name] is suffering mild pain.") if (41 to 60) - to_chat(usr, "\blue Condition: [M.name] is suffering significant pain.") + to_chat(usr, "Condition: [M.name] is suffering significant pain.") if (21 to 40) - to_chat(usr, "\blue Condition: [M.name] is suffering severe pain.") + to_chat(usr, "Condition: [M.name] is suffering severe pain.") else - to_chat(usr, "\blue Condition: [M.name] is suffering excruciating pain.") + to_chat(usr, "Condition: [M.name] is suffering excruciating pain.") thoughts = "haunted by their own mortality" switch(M.a_intent) if (I_HELP) - to_chat(usr, "\blue Mood: You sense benevolent thoughts from [M.name].") + to_chat(usr, "Mood: You sense benevolent thoughts from [M.name].") if (I_DISARM) - to_chat(usr, "\blue Mood: You sense cautious thoughts from [M.name].") + to_chat(usr, "Mood: You sense cautious thoughts from [M.name].") if (I_GRAB) - to_chat(usr, "\blue Mood: You sense hostile thoughts from [M.name].") + to_chat(usr, "Mood: You sense hostile thoughts from [M.name].") if (I_HARM) - to_chat(usr, "\blue Mood: You sense cruel thoughts from [M.name].") + to_chat(usr, "Mood: You sense cruel thoughts from [M.name].") for(var/mob/living/L in view(7,M)) if (L == M) continue thoughts = "thinking about punching [L.name]" break else - to_chat(usr, "\blue Mood: You sense strange thoughts from [M.name].") + to_chat(usr, "Mood: You sense strange thoughts from [M.name].") if (istype(M,/mob/living/carbon/human)) var/numbers[0] @@ -610,13 +615,13 @@ numbers += H.mind.initial_account.account_number numbers += H.mind.initial_account.remote_access_pin if(numbers.len>0) - to_chat(usr, "\blue Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].") - to_chat(usr, "\blue Thoughts: [M.name] is currently [thoughts].") + to_chat(usr, "b>Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].") + to_chat(usr, "Thoughts: [M.name] is currently [thoughts].") if (EMPATH in M.mutations) - to_chat(M, "\red You sense [usr.name] reading your mind.") + to_chat(M, "You sense [usr.name] reading your mind.") else if (prob(5) || M.mind.assigned_role=="Chaplain") - to_chat(M, "\red You sense someone intruding upon your thoughts...") + to_chat(M, "You sense someone intruding upon your thoughts...") return //////////////////////////////////////////////////////////////////////// @@ -627,13 +632,13 @@ desc = "Vastly increases the gas capacity of the subject's digestive tract." activation_messages = list("You feel bloated and gassy.") deactivation_messages = list("You no longer feel gassy. What a relief!") - + instability = 2 mutation = SUPER_FART spelltype = /obj/effect/proc_holder/spell/aoe_turf/superfart - New() - ..() - block = SUPERFARTBLOCK +/datum/dna/gene/basic/grant_spell/superfart/New() + ..() + block = SUPERFARTBLOCK /obj/effect/proc_holder/spell/aoe_turf/superfart name = "Super Fart" diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index eb33cef7ccf..4e3d77efb66 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -6,151 +6,163 @@ name="No Breathing" activation_messages=list("You feel no need to breathe.") deactivation_messages=list("You feel the need to breathe, once more.") + instability = 2 mutation=NO_BREATH activation_prob=10 - New() - block=NOBREATHBLOCK +/datum/dna/gene/basic/nobreath/New() + block=NOBREATHBLOCK /datum/dna/gene/basic/regenerate name="Regenerate" activation_messages=list("Your wounds start healing.") deactivation_messages=list("Your regenerative powers feel like they've vanished.") + instability = 1 mutation=REGEN - New() - block=REGENERATEBLOCK +/datum/dna/gene/basic/regenerate/New() + block=REGENERATEBLOCK /datum/dna/gene/basic/increaserun name="Super Speed" activation_messages=list("You feel swift and unencumbered.") deactivation_messages=list("You feel slow.") + instability = 2 mutation=RUN - New() - block=INCREASERUNBLOCK +/datum/dna/gene/basic/increaserun/New() + block=INCREASERUNBLOCK /datum/dna/gene/basic/heat_resist name="Heat Resistance" activation_messages=list("Your skin is icy to the touch.") deactivation_messages=list("Your skin no longer feels icy to the touch.") + instability = 2 mutation=RESIST_HEAT - New() - block=COLDBLOCK +/datum/dna/gene/basic/heat_resist/New() + block=COLDBLOCK - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "cold[fat]_s" +/datum/dna/gene/basic/heat_resist/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "cold[fat]_s" /datum/dna/gene/basic/cold_resist name="Cold Resistance" activation_messages=list("Your body is filled with warmth.") deactivation_messages=list("Your body is no longer filled with warmth.") + instability = 2 mutation=RESIST_COLD - New() - block=FIREBLOCK +/datum/dna/gene/basic/cold_resist/New() + block=FIREBLOCK - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "fire[fat]_s" +/datum/dna/gene/basic/cold_resist/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "fire[fat]_s" /datum/dna/gene/basic/noprints name="No Prints" activation_messages=list("Your fingers feel numb.") deactivation_messages=list("your fingers no longer feel numb.") + instability = 1 mutation=FINGERPRINTS - New() - block=NOPRINTSBLOCK +/datum/dna/gene/basic/noprints/New() + block=NOPRINTSBLOCK /datum/dna/gene/basic/noshock name="Shock Immunity" activation_messages=list("Your skin feels dry and unreactive.") deactivation_messages=list("Your skin no longer feels dry and unreactive.") + instability = 2 mutation=NO_SHOCK - New() - block=SHOCKIMMUNITYBLOCK +/datum/dna/gene/basic/noshock/New() + block=SHOCKIMMUNITYBLOCK /datum/dna/gene/basic/midget name="Midget" activation_messages=list("Everything around you seems bigger now...") deactivation_messages = list("Everything around you seems to shrink...") + instability = 1 mutation=DWARF - New() - block=SMALLSIZEBLOCK +/datum/dna/gene/basic/midget/New() + block=SMALLSIZEBLOCK - activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.pass_flags |= PASSTABLE - M.resize = 0.8 +/datum/dna/gene/basic/midget/activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.pass_flags |= PASSTABLE + M.resize = 0.8 - deactivate(var/mob/M, var/connected, var/flags) - ..() - M.pass_flags &= ~PASSTABLE - M.resize = 1.25 +/datum/dna/gene/basic/midget/deactivate(var/mob/M, var/connected, var/flags) + ..() + M.pass_flags &= ~PASSTABLE + M.resize = 1.25 // OLD HULK BEHAVIOR /datum/dna/gene/basic/hulk name="Hulk" activation_messages=list("Your muscles hurt.") deactivation_messages=list("Your muscles shrink.") + instability = 8 mutation=HULK activation_prob=5 - New() - block=HULKBLOCK +/datum/dna/gene/basic/hulk/New() + block=HULKBLOCK - activate(var/mob/M, var/connected, var/flags) - ..() - var/status = CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH - M.status_flags &= ~status +/datum/dna/gene/basic/hulk/activate(var/mob/M, var/connected, var/flags) + ..() + var/status = CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH + M.status_flags &= ~status - deactivate(var/mob/M, var/connected, var/flags) - ..() - M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH +/datum/dna/gene/basic/hulk/deactivate(var/mob/M, var/connected, var/flags) + ..() + M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH - OnDrawUnderlays(var/mob/M,var/g,var/fat) - if(HULK in M.mutations) - if(fat) - return "hulk_[fat]_s" - else - return "hulk_[g]_s" - return 0 +/datum/dna/gene/basic/hulk/OnDrawUnderlays(var/mob/M,var/g,var/fat) + if(HULK in M.mutations) + if(fat) + return "hulk_[fat]_s" + else + return "hulk_[g]_s" + return 0 - OnMobLife(var/mob/living/carbon/human/M) - if(!istype(M)) return - if ((HULK in M.mutations) && M.health <= 0) - M.mutations.Remove(HULK) - M.dna.SetSEState(HULKBLOCK,0) - genemutcheck(M, HULKBLOCK,null,MUTCHK_FORCED) - M.update_mutations() //update our mutation overlays - M.update_body() - M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved. - to_chat(M, "You suddenly feel very weak.") +/datum/dna/gene/basic/hulk/OnMobLife(var/mob/living/carbon/human/M) + if(!istype(M)) + return + if ((HULK in M.mutations) && M.health <= 0) + M.mutations.Remove(HULK) + M.dna.SetSEState(HULKBLOCK,0) + genemutcheck(M, HULKBLOCK,null,MUTCHK_FORCED) + M.update_mutations() //update our mutation overlays + M.update_body() + M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved. + to_chat(M, "You suddenly feel very weak.") /datum/dna/gene/basic/xray name="X-Ray Vision" activation_messages=list("The walls suddenly disappear.") deactivation_messages=list("the walls around you re-appear.") + instability = 8 mutation=XRAY activation_prob=10 - New() - block=XRAYBLOCK +/datum/dna/gene/basic/xray/New() + block=XRAYBLOCK /datum/dna/gene/basic/tk name="Telekenesis" activation_messages = list("You feel smarter.") deactivation_messages = list("You feel dumber.") + instability = 8 mutation=TK activation_prob=10 - New() - block=TELEBLOCK +/datum/dna/gene/basic/tk/New() + block=TELEBLOCK - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "telekinesishead[fat]_s" \ No newline at end of file +/datum/dna/gene/basic/tk/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "telekinesishead[fat]_s" diff --git a/code/game/dna/genes/vg_disabilities.dm b/code/game/dna/genes/vg_disabilities.dm index 3514a658c18..e3c6b9883c6 100644 --- a/code/game/dna/genes/vg_disabilities.dm +++ b/code/game/dna/genes/vg_disabilities.dm @@ -4,33 +4,36 @@ desc = "Forces the speaking centre of the subjects brain to yell every sentence." activation_message = "YOU FEEL LIKE YELLING!" deactivation_message = "You feel like being quiet.." + instability = -1 mutation = LOUD - New() - ..() - block=LOUDBLOCK +/datum/dna/gene/disability/speech/loud/New() + ..() + block=LOUDBLOCK - OnSay(var/mob/M, var/message) - message = replacetext(message,".","!") - message = replacetext(message,"?","?!") - message = replacetext(message,"!","!!") - return uppertext(message) +/datum/dna/gene/disability/speech/loud/OnSay(var/mob/M, var/message) + message = replacetext(message,".","!") + message = replacetext(message,"?","?!") + message = replacetext(message,"!","!!") + return uppertext(message) /datum/dna/gene/disability/dizzy name = "Dizzy" desc = "Causes the cerebellum to shut down in some places." activation_message = "You feel very dizzy..." deactivation_message = "You regain your balance." + instability = -2 mutation = DIZZY - New() - ..() - block=DIZZYBLOCK +/datum/dna/gene/disability/dizzy/New() + ..() + block=DIZZYBLOCK - OnMobLife(var/mob/living/carbon/human/M) - if(!istype(M)) return - if(DIZZY in M.mutations) - M.Dizzy(300) +/datum/dna/gene/disability/dizzy/OnMobLife(var/mob/living/carbon/human/M) + if(!istype(M)) + return + if(DIZZY in M.mutations) + M.Dizzy(300) diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index 08784b71a61..fd2061e66fb 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -3,17 +3,15 @@ /datum/dna/gene/basic/grant_spell/morph name = "Morphism" desc = "Enables the subject to reconfigure their appearance to that of any human." - spelltype =/obj/effect/proc_holder/spell/targeted/morph activation_messages=list("Your body feels if can alter its appearance.") deactivation_messages = list("Your body doesn't feel capable of altering its appearance.") - - + instability = 1 mutation=MORPH - New() - ..() - block = MORPHBLOCK +/datum/dna/gene/basic/grant_spell/morph/New() + ..() + block = MORPHBLOCK /obj/effect/proc_holder/spell/targeted/morph name = "Morph" @@ -34,7 +32,7 @@ if(!ishuman(usr)) return if (istype(usr.loc,/mob/)) - to_chat(usr, "\red You can't change your appearance right now!") + to_chat(usr, "You can't change your appearance right now!") return var/mob/living/carbon/human/M=usr var/obj/item/organ/external/head/head_organ = M.get_organ("head") @@ -146,19 +144,20 @@ M.regenerate_icons() M.update_dna() - M.visible_message("\blue \The [src] morphs and changes [M.get_visible_gender() == MALE ? "his" : M.get_visible_gender() == FEMALE ? "her" : "their"] appearance!", "\blue You change your appearance!", "\red Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") + M.visible_message("[src] morphs and changes [M.get_visible_gender() == MALE ? "his" : M.get_visible_gender() == FEMALE ? "her" : "their"] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") /datum/dna/gene/basic/grant_spell/remotetalk name="Telepathy" activation_messages=list("You feel you can project your thoughts.") deactivation_messages=list("You no longer feel you can project your thoughts.") + instability = 1 mutation=REMOTE_TALK spelltype =/obj/effect/proc_holder/spell/targeted/remotetalk - New() - ..() - block=REMOTETALKBLOCK +/datum/dna/gene/basic/grant_spell/remotetalk/New() + ..() + block=REMOTETALKBLOCK /obj/effect/proc_holder/spell/targeted/remotetalk name = "Project Mind" @@ -206,10 +205,10 @@ for(var/mob/living/target in targets) log_say("Project Mind: [key_name(usr)]->[key_name(target)]: [say]") if(REMOTE_TALK in target.mutations) - target.show_message("\blue You hear [usr.real_name]'s voice: [say]") + target.show_message("You hear [usr.real_name]'s voice: [say]") else - target.show_message("\blue You hear a voice that seems to echo around the room: [say]") - usr.show_message("\blue You project your mind into [target.real_name]: [say]") + target.show_message("You hear a voice that seems to echo around the room: [say]") + usr.show_message("You project your mind into [target.real_name]: [say]") for(var/mob/dead/observer/G in player_list) G.show_message("Telepathic message from [usr] ([ghost_follow_link(usr, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]") @@ -217,12 +216,13 @@ name="Remote Viewing" activation_messages=list("Your mind can see things from afar.") deactivation_messages=list("Your mind can no longer can see things from afar.") + instability = 1 mutation=REMOTE_VIEW spelltype =/obj/effect/proc_holder/spell/targeted/remoteview - New() - block=REMOTEVIEWBLOCK +/datum/dna/gene/basic/grant_spell/remoteview/New() + block=REMOTEVIEWBLOCK /obj/effect/proc_holder/spell/targeted/remoteview @@ -262,7 +262,7 @@ var/mob/target if(istype(user.l_hand, /obj/item/tk_grab) || istype(user.r_hand, /obj/item/tk_grab/)) - to_chat(user, "\red Your mind is too busy with that telekinetic grab.") + to_chat(user, "Your mind is too busy with that telekinetic grab.") user.remoteview_target = null user.reset_view(0) return @@ -285,5 +285,3 @@ else user.remoteview_target = null user.reset_view(0) - - diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a41f787a49c..d1c9b92c917 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -170,15 +170,16 @@ adjustCloneLoss(0.1) /mob/living/carbon/human/handle_mutations_and_radiation() + var/gene_instability = DEFAULT_GENE_INSTABILITY for(var/datum/dna/gene/gene in dna_genes) if(!gene.block) continue if(gene.is_active(src)) - /* if (prob(10) && prob(gene.instability)) - adjustCloneLoss(1) */ + gene_instability += gene.instability speech_problem_flag = 1 gene.OnMobLife(src) - + if(prob(10) && prob(max(gene_instability, 0))) + adjustCloneLoss(0.3 * gene_instability) if(!(species.flags & RADIMMUNE)) if (radiation) From 4bfd6ce95adc04f7b457042e5e1cef508e44135a Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 27 Jun 2016 13:12:50 -0400 Subject: [PATCH 02/23] Changes numbers --- code/__DEFINES/genetics.dm | 5 +++- code/game/dna/genes/disabilities.dm | 18 +++++++------- code/game/dna/genes/goon_disabilities.dm | 10 ++++---- code/game/dna/genes/goon_powers.dm | 14 +++++------ code/game/dna/genes/powers.dm | 22 ++++++++--------- code/game/dna/genes/vg_disabilities.dm | 3 +-- code/game/dna/genes/vg_powers.dm | 6 ++--- code/modules/mob/living/carbon/human/life.dm | 25 ++++++++++++++++---- 8 files changed, 59 insertions(+), 44 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 5e04d288764..1baa779b492 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -125,4 +125,7 @@ #define NUTRITION_LEVEL_STARVING 150 //Used for calculations for negative effects of having genetics powers -#define DEFAULT_GENE_INSTABILITY -4 +#define DEFAULT_GENE_STABILITY 100 +#define GENE_INSTABILITY_MINOR 5 +#define GENE_INSTABILITY_MODERATE 10 +#define GENE_INSTABILITY_MAJOR 15 diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index cb2ab29dae0..4505dc1c1db 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -55,7 +55,7 @@ name="Hallucinate" activation_message="Your mind says 'Hello'." deactivation_message ="Sanity returns. Or does it?" - instability = -2 + instability = -GENE_INSTABILITY_MODERATE mutation=HALLUCINATE /datum/dna/gene/disability/hallucinate/New() @@ -65,7 +65,7 @@ name="Epilepsy" activation_message="You get a headache." deactivation_message ="Your headache is gone, at last." - instability = -2 + instability = -GENE_INSTABILITY_MODERATE disability=EPILEPSY /datum/dna/gene/disability/epilepsy/New() @@ -75,7 +75,7 @@ name="Coughing" activation_message="You start coughing." deactivation_message ="Your throat stops aching." - instability = -1 + instability = -GENE_INSTABILITY_MINOR disability=COUGHING /datum/dna/gene/disability/cough/New() @@ -85,7 +85,7 @@ name="Clumsiness" activation_message="You feel lightheaded." deactivation_message ="You regain some control of your movements" - instability = -2 + instability = -GENE_INSTABILITY_MINOR mutation=CLUMSY /datum/dna/gene/disability/clumsy/New() @@ -95,7 +95,7 @@ name="Tourettes" activation_message="You twitch." deactivation_message ="Your mouth tastes like soap." - instability = -1 + instability = -GENE_INSTABILITY_MODERATE disability=TOURETTES /datum/dna/gene/disability/tourettes/New() @@ -105,7 +105,6 @@ name="Nervousness" activation_message="You feel nervous." deactivation_message ="You feel much calmer." - instability = -1 disability=NERVOUS /datum/dna/gene/disability/nervousness/New() @@ -115,7 +114,7 @@ name="Blindness" activation_message="You can't seem to see anything." deactivation_message ="You can see now, in case you didn't notice..." - instability = -5 + instability = -GENE_INSTABILITY_MAJOR sdisability=BLIND /datum/dna/gene/disability/blindness/New() @@ -125,7 +124,7 @@ name="Deafness" activation_message="It's kinda quiet." deactivation_message ="You can hear again!" - instability = -4 + instability = -GENE_INSTABILITY_MAJOR sdisability=DEAF /datum/dna/gene/disability/deaf/New() @@ -139,7 +138,7 @@ name="Nearsightedness" activation_message="Your eyes feel weird..." deactivation_message ="You can see clearly now" - instability = -3 + instability = -GENE_INSTABILITY_MODERATE disability=NEARSIGHTED /datum/dna/gene/disability/nearsighted/New() @@ -151,7 +150,6 @@ desc = "I wonder wath thith doeth." activation_message = "Thomething doethn't feel right." deactivation_message = "You now feel able to pronounce consonants." - instability = -1 mutation = LISP /datum/dna/gene/disability/lisp/New() diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm index 5fa8d6bb10c..5ec04865591 100644 --- a/code/game/dna/genes/goon_disabilities.dm +++ b/code/game/dna/genes/goon_disabilities.dm @@ -12,7 +12,7 @@ desc = "Completely shuts down the speech center of the subject's brain." activation_message = "You feel unable to express yourself at all." deactivation_message = "You feel able to speak freely again." - instability = -3 + instability = -GENE_INSTABILITY_MODERATE sdisability = MUTE /datum/dna/gene/disability/mute/New() @@ -31,7 +31,7 @@ desc = "The subject suffers from constant radiation sickness and causes the same on nearby organics." activation_message = "You feel a strange sickness permeate your whole body." deactivation_message = "You no longer feel awful and sick all over." - instability = -6 + instability = -GENE_INSTABILITY_MAJOR mutation = RADIOACTIVE /datum/dna/gene/disability/radioactive/New() @@ -61,7 +61,7 @@ desc = "Greatly slows the subject's metabolism, enabling greater buildup of lipid tissue." activation_message = "You feel blubbery and lethargic!" deactivation_message = "You feel fit!" - instability = -2 + instability = -GENE_INSTABILITY_MINOR mutation = OBESITY /datum/dna/gene/disability/fat/New() @@ -74,7 +74,6 @@ desc = "Forces the language center of the subject's brain to construct sentences in a more rudimentary manner." activation_message = "Ye feel like a reet prat like, innit?" deactivation_message = "You no longer feel like being rude and sassy." - instability = -1 mutation = CHAV /datum/dna/gene/disability/speech/chav/New() @@ -114,7 +113,6 @@ desc = "Forces the language center of the subject's brain to construct sentences in a vaguely norse manner." activation_message = "You feel Swedish, however that works." deactivation_message = "The feeling of Swedishness passes." - instability = -1 mutation = SWEDISH /datum/dna/gene/disability/speech/swedish/New() @@ -134,7 +132,7 @@ desc = "Heavily corrupts the part of the brain responsible for forming spoken sentences." activation_message = "You can't seem to form any coherent thoughts!" deactivation_message = "Your mind feels more clear." - instability = -1 + instability = -GENE_INSTABILITY_MINOR mutation = SCRAMBLED /datum/dna/gene/disability/unintelligable/New() diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 7cc0731e3bb..8df3af9a834 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -28,7 +28,7 @@ ///////////////////////// /datum/dna/gene/basic/stealth - instability = 4 + instability = GENE_INSTABILITY_MODERATE /datum/dna/gene/basic/stealth/can_activate(var/mob/M, var/flags) // Can only activate one of these at a time. @@ -121,7 +121,7 @@ desc = "Allows the subject to lower the body temperature of others." activation_messages = list("You notice a strange cold tingle in your fingertips.") deactivation_messages = list("Your fingers feel warmer.") - instability = 4 + instability = GENE_INSTABILITY_MODERATE mutation = CRYO spelltype = /obj/effect/proc_holder/spell/targeted/cryokinesis @@ -218,7 +218,7 @@ desc = "Allows the subject to eat just about anything without harm." activation_messages = list("You feel hungry.") deactivation_messages = list("You don't feel quite so hungry anymore.") - instability = 2 + instability = GENE_INSTABILITY_MINOR mutation = EATER spelltype=/obj/effect/proc_holder/spell/targeted/eat @@ -360,7 +360,7 @@ //cooldown = 30 activation_messages = list("Your leg muscles feel taut and strong.") deactivation_messages = list("Your leg muscles shrink back to normal.") - instability = 2 + instability = GENE_INSTABILITY_MINOR mutation = JUMPY spelltype =/obj/effect/proc_holder/spell/targeted/leap @@ -463,7 +463,7 @@ //cooldown = 1800 activation_messages = list("You don't feel entirely like yourself somehow.") deactivation_messages = list("You feel secure in your identity.") - instability = 3 + instability = GENE_INSTABILITY_MODERATE mutation = POLYMORPH /datum/dna/gene/basic/grant_spell/polymorph/New() @@ -514,7 +514,7 @@ spelltype = /obj/effect/proc_holder/spell/targeted/empath activation_messages = list("You suddenly notice more about others than you did before.") deactivation_messages = list("You no longer feel able to sense intentions.") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=EMPATH /datum/dna/gene/basic/grant_spell/empath/New() @@ -632,7 +632,7 @@ desc = "Vastly increases the gas capacity of the subject's digestive tract." activation_messages = list("You feel bloated and gassy.") deactivation_messages = list("You no longer feel gassy. What a relief!") - instability = 2 + instability = GENE_INSTABILITY_MINOR mutation = SUPER_FART spelltype = /obj/effect/proc_holder/spell/aoe_turf/superfart diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index 4e3d77efb66..2f211f7a057 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -6,7 +6,7 @@ name="No Breathing" activation_messages=list("You feel no need to breathe.") deactivation_messages=list("You feel the need to breathe, once more.") - instability = 2 + instability = GENE_INSTABILITY_MODERATE mutation=NO_BREATH activation_prob=10 @@ -18,7 +18,7 @@ name="Regenerate" activation_messages=list("Your wounds start healing.") deactivation_messages=list("Your regenerative powers feel like they've vanished.") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=REGEN /datum/dna/gene/basic/regenerate/New() @@ -28,7 +28,7 @@ name="Super Speed" activation_messages=list("You feel swift and unencumbered.") deactivation_messages=list("You feel slow.") - instability = 2 + instability = GENE_INSTABILITY_MINOR mutation=RUN /datum/dna/gene/basic/increaserun/New() @@ -39,7 +39,7 @@ name="Heat Resistance" activation_messages=list("Your skin is icy to the touch.") deactivation_messages=list("Your skin no longer feels icy to the touch.") - instability = 2 + instability = GENE_INSTABILITY_MODERATE mutation=RESIST_HEAT /datum/dna/gene/basic/heat_resist/New() @@ -52,7 +52,7 @@ name="Cold Resistance" activation_messages=list("Your body is filled with warmth.") deactivation_messages=list("Your body is no longer filled with warmth.") - instability = 2 + instability = GENE_INSTABILITY_MODERATE mutation=RESIST_COLD /datum/dna/gene/basic/cold_resist/New() @@ -65,7 +65,7 @@ name="No Prints" activation_messages=list("Your fingers feel numb.") deactivation_messages=list("your fingers no longer feel numb.") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=FINGERPRINTS /datum/dna/gene/basic/noprints/New() @@ -75,7 +75,7 @@ name="Shock Immunity" activation_messages=list("Your skin feels dry and unreactive.") deactivation_messages=list("Your skin no longer feels dry and unreactive.") - instability = 2 + instability = GENE_INSTABILITY_MODERATE mutation=NO_SHOCK /datum/dna/gene/basic/noshock/New() @@ -85,7 +85,7 @@ name="Midget" activation_messages=list("Everything around you seems bigger now...") deactivation_messages = list("Everything around you seems to shrink...") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=DWARF /datum/dna/gene/basic/midget/New() @@ -106,7 +106,7 @@ name="Hulk" activation_messages=list("Your muscles hurt.") deactivation_messages=list("Your muscles shrink.") - instability = 8 + instability = GENE_INSTABILITY_MAJOR mutation=HULK activation_prob=5 @@ -146,7 +146,7 @@ name="X-Ray Vision" activation_messages=list("The walls suddenly disappear.") deactivation_messages=list("the walls around you re-appear.") - instability = 8 + instability = GENE_INSTABILITY_MAJOR mutation=XRAY activation_prob=10 @@ -157,7 +157,7 @@ name="Telekenesis" activation_messages = list("You feel smarter.") deactivation_messages = list("You feel dumber.") - instability = 8 + instability = GENE_INSTABILITY_MAJOR mutation=TK activation_prob=10 diff --git a/code/game/dna/genes/vg_disabilities.dm b/code/game/dna/genes/vg_disabilities.dm index e3c6b9883c6..ece9cb1da5c 100644 --- a/code/game/dna/genes/vg_disabilities.dm +++ b/code/game/dna/genes/vg_disabilities.dm @@ -4,7 +4,6 @@ desc = "Forces the speaking centre of the subjects brain to yell every sentence." activation_message = "YOU FEEL LIKE YELLING!" deactivation_message = "You feel like being quiet.." - instability = -1 mutation = LOUD /datum/dna/gene/disability/speech/loud/New() @@ -24,7 +23,7 @@ desc = "Causes the cerebellum to shut down in some places." activation_message = "You feel very dizzy..." deactivation_message = "You regain your balance." - instability = -2 + instability = -GENE_INSTABILITY_MINOR mutation = DIZZY /datum/dna/gene/disability/dizzy/New() diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index fd2061e66fb..0affb14e014 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -6,7 +6,7 @@ spelltype =/obj/effect/proc_holder/spell/targeted/morph activation_messages=list("Your body feels if can alter its appearance.") deactivation_messages = list("Your body doesn't feel capable of altering its appearance.") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=MORPH /datum/dna/gene/basic/grant_spell/morph/New() @@ -150,7 +150,7 @@ name="Telepathy" activation_messages=list("You feel you can project your thoughts.") deactivation_messages=list("You no longer feel you can project your thoughts.") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=REMOTE_TALK spelltype =/obj/effect/proc_holder/spell/targeted/remotetalk @@ -216,7 +216,7 @@ name="Remote Viewing" activation_messages=list("Your mind can see things from afar.") deactivation_messages=list("Your mind can no longer can see things from afar.") - instability = 1 + instability = GENE_INSTABILITY_MINOR mutation=REMOTE_VIEW spelltype =/obj/effect/proc_holder/spell/targeted/remoteview diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d1c9b92c917..a7c5e8dc649 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -170,16 +170,33 @@ adjustCloneLoss(0.1) /mob/living/carbon/human/handle_mutations_and_radiation() - var/gene_instability = DEFAULT_GENE_INSTABILITY + var/gene_stability = DEFAULT_GENE_STABILITY for(var/datum/dna/gene/gene in dna_genes) if(!gene.block) continue if(gene.is_active(src)) - gene_instability += gene.instability + gene_stability -= gene.instability speech_problem_flag = 1 gene.OnMobLife(src) - if(prob(10) && prob(max(gene_instability, 0))) - adjustCloneLoss(0.3 * gene_instability) + if(mind && mind.special_role && mind.special_role == "Wizard") //magic + gene_instability = DEFAULT_GENE_STABILITY + if(gene_stability < 85)) + if(prob(5)) + adjustBurnLoss(2) + to_chat(src, "You feel like your skin is burning and bubbling off!") + if(gene_stability < 70) + if(prob(3)) + adjustCloneLoss(2) + to_chat(src, "You feel as if your body is warping.") + if(prob(5)) + adjustToxLoss(3) + to_chat(src, "You feel weak and nauseous.") + if(gene_stability < 40 && getCloneLoss() > 30) + to_chat(src, "You feel incredibly sick... Something isn't right!") + spawn(180) + if(getCloneLoss()) + gib() + if(!(species.flags & RADIMMUNE)) if (radiation) From 1573e9be7b39b747d42b9c521ae2d22d360b58f0 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Mon, 27 Jun 2016 13:27:22 -0400 Subject: [PATCH 03/23] There we go --- code/modules/mob/living/carbon/human/life.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a7c5e8dc649..88c7964c07c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -178,12 +178,10 @@ gene_stability -= gene.instability speech_problem_flag = 1 gene.OnMobLife(src) - if(mind && mind.special_role && mind.special_role == "Wizard") //magic - gene_instability = DEFAULT_GENE_STABILITY - if(gene_stability < 85)) + if(gene_stability < 85) if(prob(5)) - adjustBurnLoss(2) - to_chat(src, "You feel like your skin is burning and bubbling off!") + adjustFireLoss(2) + to_chat(src, "You feel like your skin is burning and bubbling off!") if(gene_stability < 70) if(prob(3)) adjustCloneLoss(2) @@ -191,10 +189,10 @@ if(prob(5)) adjustToxLoss(3) to_chat(src, "You feel weak and nauseous.") - if(gene_stability < 40 && getCloneLoss() > 30) + if(gene_stability < 40 && getCloneLoss() > 50 && prob(5)) to_chat(src, "You feel incredibly sick... Something isn't right!") spawn(180) - if(getCloneLoss()) + if(getCloneLoss() > 10) gib() if(!(species.flags & RADIMMUNE)) From 551b2aefbdee42a304c08909192502077e94497d Mon Sep 17 00:00:00 2001 From: TheDZD Date: Sat, 2 Jul 2016 19:17:17 -0400 Subject: [PATCH 04/23] Remove some shit from Life(), and fix wiznerd thing --- code/game/dna/genes/gene.dm | 6 ++++-- code/game/gamemodes/wizard/wizard.dm | 1 + code/modules/mob/living/carbon/human/human_defines.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 2 -- code/modules/mob/living/living_defines.dm | 4 +++- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm index ad2b1f43c54..a39da68c92e 100644 --- a/code/game/dna/genes/gene.dm +++ b/code/game/dna/genes/gene.dm @@ -38,14 +38,16 @@ return 0 // Called when the gene activates. Do your magic here. -/datum/dna/gene/proc/activate(var/mob/M, var/connected, var/flags) +/datum/dna/gene/proc/activate(var/mob/living/M, var/connected, var/flags) + M.gene_stability += instability return /** * Called when the gene deactivates. Undo your magic here. * Only called when the block is deactivated. */ -/datum/dna/gene/proc/deactivate(var/mob/M, var/connected, var/flags) +/datum/dna/gene/proc/deactivate(var/mob/living/M, var/connected, var/flags) + M.gene_stability -= instability return // This section inspired by goone's bioEffects. diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 6aa56d91c70..d98eae3135d 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -195,6 +195,7 @@ to_chat(wizard_mob, "In your pockets you will find a teleport scroll. Use it as needed.") wizard_mob.mind.store_memory("Remember: do not forget to prepare your spells.") wizard_mob.update_icons() + wizard_mob.gene_stability = 2 * DEFAULT_GENE_STABILITY //magic return 1 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 6f106f5e125..3af93392326 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -80,4 +80,4 @@ var/global/default_martial_art = new/datum/martial_art var/fire_dmi = 'icons/mob/OnFire.dmi' var/fire_sprite = "Standing" - var/datum/body_accessory/body_accessory = null \ No newline at end of file + var/datum/body_accessory/body_accessory = null diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 88c7964c07c..9a56765bf67 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -170,12 +170,10 @@ adjustCloneLoss(0.1) /mob/living/carbon/human/handle_mutations_and_radiation() - var/gene_stability = DEFAULT_GENE_STABILITY for(var/datum/dna/gene/gene in dna_genes) if(!gene.block) continue if(gene.is_active(src)) - gene_stability -= gene.instability speech_problem_flag = 1 gene.OnMobLife(src) if(gene_stability < 85) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index ce73ae369c0..d4e6d613d9c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -54,4 +54,6 @@ var/list/butcher_results = null - var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. \ No newline at end of file + var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. + + var/gene_stability = DEFAULT_GENE_STABILITY From c53eb8607df661fcda86b762982a54acb0edcce3 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 5 Jul 2016 04:15:51 -0400 Subject: [PATCH 05/23] Allows You To Pet pAIs --- code/modules/mob/living/silicon/pai/pai.dm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 635efadcaba..c9ab50508f1 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -466,10 +466,15 @@ return /mob/living/silicon/pai/attack_hand(mob/user as mob) - if(stat == 2) return - visible_message("[user.name] boops [src] on the head.") - spawn(1) - close_up() + if(stat == DEAD) + return + if(user.a_intent == I_HELP) + user.visible_message("[user] pets [src].") + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + else + visible_message("[user.name] boops [src] on the head.") + spawn(1) + close_up() //I'm not sure how much of this is necessary, but I would rather avoid issues. /mob/living/silicon/pai/proc/close_up() From 336d2eb7914035019325316f9c6d177317c905bb Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Wed, 6 Jul 2016 22:21:47 +0100 Subject: [PATCH 06/23] Fixed Clown/Mime Door Deconstruction Fixes #4689 - Deconstructing Clown Doors now gives Bananiums - Deconstructing Mime Doors now gives Tranquilite - Invisibility drives installed :cl: tweak: Deconstructing Clown Doors gives Bananium tweat: Deconstructing Mime Doors gives Tranquilite --- code/game/machinery/doors/airlock.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9c361225866..56d9b421c37 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -257,14 +257,14 @@ /obj/machinery/door/airlock/clown name = "Bananium Airlock" icon = 'icons/obj/doors/Doorbananium.dmi' - mineral = "clown" + mineral = "bananium" doorOpen = 'sound/items/bikehorn.ogg' doorClose = 'sound/items/bikehorn.ogg' /obj/machinery/door/airlock/mime name = "Tranquillite Airlock" icon = 'icons/obj/doors/Doorfreezer.dmi' - mineral = "mime" + mineral = "tranquilite" doorOpen = null doorClose = null From c6ecdbbd11b58933e7508ac4786571a2bdc591a8 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 6 Jul 2016 17:45:58 -0400 Subject: [PATCH 07/23] Fixes Sechud Flash Protection --- code/modules/clothing/glasses/hud.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 8756290ad20..4c6fed0eec4 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -73,7 +73,6 @@ desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." icon_state = "securityhud" var/global/list/jobs[0] - flash_protect = 1 HUDType = DATA_HUD_SECURITY_ADVANCED species_fit = list("Vox") sprite_sheets = list( @@ -84,11 +83,12 @@ /obj/item/clothing/glasses/hud/security/chameleon name = "Chamleon Security HUD" desc = "A stolen security HUD integrated with Syndicate chameleon technology. Toggle to disguise the HUD. Provides flash protection." + flash_protect = 1 /obj/item/clothing/glasses/hud/security/chameleon/attack_self(mob/user) chameleon(user) -/obj/item/clothing/glasses/hud/security/jensenshades +/obj/item/clothing/glasses/hud/security/sunglasses/jensenshades name = "augmented shades" desc = "Polarized bioneural eyewear, designed to augment your vision." icon_state = "jensenshades" @@ -109,6 +109,7 @@ desc = "Sunglasses with a HUD." icon_state = "sunhud" darkness_view = 1 + flash_protect = 1 tint = 1 prescription_upgradable = 1 From 092e42417511461f8ebd7f08486a2e594b633b00 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Wed, 6 Jul 2016 23:08:26 +0100 Subject: [PATCH 08/23] Fixed Mime Doors It's not Tranquilite. It's not Tranqillite. It's Tranquillite. --- code/game/machinery/doors/airlock.dm | 2 +- icons/obj/doors/door_assembly.dmi | Bin 38036 -> 45559 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 56d9b421c37..5afe0e9c1a1 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -264,7 +264,7 @@ /obj/machinery/door/airlock/mime name = "Tranquillite Airlock" icon = 'icons/obj/doors/Doorfreezer.dmi' - mineral = "tranquilite" + mineral = "tranquillite" doorOpen = null doorClose = null diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi index db174eb329f06f2eb698148f8dc0b7c848625fa7..2c927cb8047a4ab014d7d9e8244e4cbda8aa5b4a 100644 GIT binary patch literal 45559 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 literal 38036 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 From 2df88fcdb5437306a603f9f1e48353534b119984 Mon Sep 17 00:00:00 2001 From: TheDZD Date: Wed, 6 Jul 2016 21:49:26 -0400 Subject: [PATCH 09/23] Fixes and changes --- code/game/dna/dna2_helpers.dm | 4 ---- code/game/dna/genes/disabilities.dm | 2 ++ code/game/dna/genes/gene.dm | 8 ++++--- code/game/dna/genes/goon_disabilities.dm | 10 ++++++++ code/game/dna/genes/powers.dm | 8 +++++++ code/game/gamemodes/wizard/wizard.dm | 2 +- code/game/objects/items/devices/scanners.dm | 12 +++++++--- .../objects/items/weapons/dna_injector.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 23 ++++++++++--------- 9 files changed, 48 insertions(+), 23 deletions(-) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 53f248d1e91..c15c0eebee4 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -196,7 +196,3 @@ return 1 else return 0 - -// Used below, simple injection modifier. -/proc/probinj(var/pr, var/inj) - return prob(pr+inj*pr) diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index 4505dc1c1db..bbad4a7912f 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -28,6 +28,7 @@ return 1 // Always set! /datum/dna/gene/disability/activate(var/mob/M, var/connected, var/flags) + ..() if(mutation && !(mutation in M.mutations)) M.mutations.Add(mutation) if(disability) @@ -40,6 +41,7 @@ testing("[name] has no activation message.") /datum/dna/gene/disability/deactivate(var/mob/M, var/connected, var/flags) + ..() if(mutation && (mutation in M.mutations)) M.mutations.Remove(mutation) if(disability) diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm index a39da68c92e..a3781f9985d 100644 --- a/code/game/dna/genes/gene.dm +++ b/code/game/dna/genes/gene.dm @@ -39,7 +39,7 @@ // Called when the gene activates. Do your magic here. /datum/dna/gene/proc/activate(var/mob/living/M, var/connected, var/flags) - M.gene_stability += instability + M.gene_stability -= instability return /** @@ -47,7 +47,7 @@ * Only called when the block is deactivated. */ /datum/dna/gene/proc/deactivate(var/mob/living/M, var/connected, var/flags) - M.gene_stability -= instability + M.gene_stability += instability return // This section inspired by goone's bioEffects. @@ -112,15 +112,17 @@ if(flags & MUTCHK_FORCED) return 1 // Probability check - return probinj(activation_prob,(flags&MUTCHK_FORCED)) + return prob(activation_prob) /datum/dna/gene/basic/activate(var/mob/M) + ..() M.mutations.Add(mutation) if(activation_messages.len) var/msg = pick(activation_messages) to_chat(M, "[msg]") /datum/dna/gene/basic/deactivate(var/mob/M) + ..() M.mutations.Remove(mutation) if(deactivation_messages.len) var/msg = pick(deactivation_messages) diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm index 5ec04865591..2afb9b7bd83 100644 --- a/code/game/dna/genes/goon_disabilities.dm +++ b/code/game/dna/genes/goon_disabilities.dm @@ -38,6 +38,16 @@ ..() block=RADBLOCK + +/datum/dna/gene/disability/radioactive/can_activate(var/mob/M,var/flags) + if(!..()) + return 0 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.flags & RADIMMUNE && !(flags & MUTCHK_FORCED)) + return 0 + return 1 + /datum/dna/gene/disability/radioactive/OnMobLife(var/mob/living/owner) var/radiation_amount = abs(min(owner.radiation - 20,0)) owner.apply_effect(radiation_amount, IRRADIATE) diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index 2f211f7a057..5600005271e 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -34,6 +34,14 @@ /datum/dna/gene/basic/increaserun/New() block=INCREASERUNBLOCK +/datum/dna/gene/basic/increaserun/can_activate(var/mob/M,var/flags) + if(!..()) + return 0 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.slowdown && !(flags & MUTCHK_FORCED)) + return 0 + return 1 /datum/dna/gene/basic/heat_resist name="Heat Resistance" diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index d98eae3135d..c5f8271ab63 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -195,7 +195,7 @@ to_chat(wizard_mob, "In your pockets you will find a teleport scroll. Use it as needed.") wizard_mob.mind.store_memory("Remember: do not forget to prepare your spells.") wizard_mob.update_icons() - wizard_mob.gene_stability = 2 * DEFAULT_GENE_STABILITY //magic + wizard_mob.gene_stability += DEFAULT_GENE_STABILITY //magic return 1 diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 7138a4515be..7401a593e99 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -226,7 +226,7 @@ REAGENT SCANNER for(var/datum/wound/W in e.wounds) if(W.internal) user.show_message(text("\red Internal bleeding detected. Advanced scanner required for location."), 1) break - if(M:vessel) + if(H.vessel) var/blood_volume = round(M:vessel.get_reagent_amount("blood")) var/blood_percent = blood_volume / 560 blood_percent *= 100 @@ -246,7 +246,14 @@ REAGENT SCANNER if(implant_detect) user.show_message("Detected cybernetic modifications:") user.show_message("[implant_detect]") - + if(H.gene_stability < 40) + user.show_message("Subject's genes are quickly breaking down!") + else if(H.gene_stability < 70) + user.show_message("Subject's genes are showing signs of spontenous breakdown.") + else if(H.gene_stability < 85) + user.show_message("Subject's genes are showing minor signs of instability.") + else + user.show_message("Subject's genes are stable.") src.add_fingerprint(user) return @@ -523,4 +530,3 @@ REAGENT SCANNER if (T.cores > 1) user.show_message("Anomalious slime core amount detected", 1) user.show_message("Growth progress: [T.amount_grown]/10", 1) - diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 2fc12e812fe..f243e1a6ab9 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -93,7 +93,7 @@ M.dna.UpdateSE() else M.dna.SetSEValue(block,src.GetValue()) - domutcheck(M, null, block!=null) + domutcheck(M, null, 0) M.update_mutations() if(H) H.sync_organ_dna(assimilate = 0, old_ue = prev_ue) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9a56765bf67..3a394e002d5 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -176,21 +176,22 @@ if(gene.is_active(src)) speech_problem_flag = 1 gene.OnMobLife(src) - if(gene_stability < 85) - if(prob(5)) - adjustFireLoss(2) + if(gene_stability < 85) + var/instability = DEFAULT_GENE_STABILITY - gene_stability + if(prob(instability / 10)) + adjustFireLoss(min(6, instability / 12)) to_chat(src, "You feel like your skin is burning and bubbling off!") if(gene_stability < 70) - if(prob(3)) - adjustCloneLoss(2) + if(prob(instability / 12)) + adjustCloneLoss(min(5, instability / 15)) to_chat(src, "You feel as if your body is warping.") - if(prob(5)) - adjustToxLoss(3) + if(prob(instability / 10)) + adjustToxLoss(min(6, instability / 12)) to_chat(src, "You feel weak and nauseous.") - if(gene_stability < 40 && getCloneLoss() > 50 && prob(5)) - to_chat(src, "You feel incredibly sick... Something isn't right!") - spawn(180) - if(getCloneLoss() > 10) + if(gene_stability < 40 && prob(1)) + to_chat(src, "You feel incredibly sick... Something isn't right!") + spawn(300) + if(gene_stability < 40) gib() if(!(species.flags & RADIMMUNE)) From e195b07eee09c13c83d3246cb0a360b893e46071 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Thu, 7 Jul 2016 02:53:27 +0100 Subject: [PATCH 10/23] Revoked Botanist Access to Morgue - Botanists were given access to the Morgue because of Replicant Pods - Replicant pods no longer work as a cloning method - Ergo, botanists outta the morgue :cl: remove: Botanist access to the morgue revoked /:cl: --- code/game/jobs/job/support.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index c940e7f15dd..13370ae281d 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -81,8 +81,8 @@ spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#dddddd" - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning. - minimal_access = list(access_hydroponics, access_morgue, access_maint_tunnels) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning. + access = list(access_hydroponics, access_bar, access_kitchen) + minimal_access = list(access_hydroponics, access_maint_tunnels) alt_titles = list("Hydroponicist", "Botanical Researcher") From 783536d2784928e06f408e6c73938f9f204d672a Mon Sep 17 00:00:00 2001 From: Krausus Date: Thu, 7 Jul 2016 01:25:56 -0400 Subject: [PATCH 11/23] Replaces ID photos with bicons --- code/datums/datacore.dm | 2 ++ code/game/machinery/computer/medical.dm | 7 ++---- code/game/machinery/computer/security.dm | 8 ++----- code/game/machinery/computer/skills.dm | 8 ++----- code/game/objects/items/weapons/cards_ids.dm | 23 +++++++++----------- code/modules/computer3/computers/medical.dm | 7 ++---- code/modules/computer3/computers/security.dm | 8 ++----- 7 files changed, 22 insertions(+), 41 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index d07b6e3eb73..ff081676b43 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -66,6 +66,8 @@ G.fields["sex"] = capitalize(H.gender) G.fields["species"] = H.get_species() G.fields["photo"] = get_id_photo(H) + G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = SOUTH))]'" + G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = WEST))]'" if(H.gen_record && !jobban_isbanned(H, "Records")) G.fields["notes"] = H.gen_record else diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 6e331d46cf3..4727953e5df 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -54,10 +54,6 @@ if(3.0) dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) if(4.0) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") dat += "
Medical Record

" if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) dat += "
Name: [active1.fields["name"]] \ @@ -67,7 +63,8 @@ Fingerprint: [active1.fields["fingerprint"]]
\n \ Physical Status: [active1.fields["p_stat"]]
\n \ Mental Status: [active1.fields["m_stat"]]
\ - Photo:
" + Photo:
\ + " else dat += "General Record Lost!
" if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 6f285930ab7..f1c475a122b 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -165,10 +165,6 @@ if(3.0) dat += "
Security Record

" if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") dat += {"
Name: [active1.fields["name"]]
@@ -182,8 +178,8 @@
Photo:
- -
+ +
Print Photo
"} else diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index ddcfeed9a74..1d5e0ce53dd 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -87,10 +87,6 @@ if(3.0) dat += "
Employment Record

" if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") dat += text(" \ -
\ Name: [active1.fields["name"]]
\ ID: [active1.fields["id"]]
\n \ @@ -101,8 +97,8 @@ Physical Status: [active1.fields["p_stat"]]
\n \ Mental Status: [active1.fields["m_stat"]]

\n \ Employment/skills summary:
[active1.fields["notes"]]
Photo:
\ -
") + Photo:
\ + ") else dat += "General Record Lost!
" dat += text("\nDelete Record (ALL)

\nPrint Record
\nBack
", src, src, src) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 97f66ec6a72..85c25d2b98a 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -103,8 +103,6 @@ var/sex var/age var/photo - var/icon/front - var/icon/side var/dat var/stamped = 0 @@ -137,12 +135,6 @@ var/datum/asset/assets = get_asset_datum(/datum/asset/simple/paper) assets.send(user) - if(!front) - front = new(photo, dir = SOUTH) - if(!side) - side = new(photo, dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") var/datum/browser/popup = new(user, "idcard", name, 600, 400) popup.set_content(dat) popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) @@ -170,6 +162,9 @@ dna_hash = H.dna.unique_enzymes fingerprint_hash = md5(H.dna.uni_identity) + var/photo_front = "'data:image/png;base64,[icon2base64(icon(photo, dir = SOUTH))]'" + var/photo_side = "'data:image/png;base64,[icon2base64(icon(photo, dir = WEST))]'" + dat = ("
") dat += text("Name: []
", registered_name) dat += text("Sex: []
\n", sex) @@ -178,8 +173,8 @@ dat += text("Fingerprint: []
\n", fingerprint_hash) dat += text("Blood Type: []
\n", blood_type) dat += text("DNA Hash: []

\n", dna_hash) - dat +="
Photo:
\ -
" + dat +="Photo:
\ + " /obj/item/weapon/card/id/GetAccess() if(!guest_pass) @@ -341,7 +336,7 @@ if("Show") return ..() if("Edit") - switch(input(user,"What would you like to edit on \the [src]?") in list("Name","Photo","Appearance","Sex","Age","Occupation","Money Account","Blood Type","DNA Hash","Fingerprint Hash","Reset Card")) + switch(input(user,"What would you like to edit on \the [src]?") in list("Name","Appearance","Sex","Age","Occupation","Money Account","Blood Type","DNA Hash","Fingerprint Hash","Reset Card")) if("Name") var/new_name = reject_bad_name(input(user,"What name would you like to put on this card?","Agent Card Name", ishuman(user) ? user.real_name : user.name)) if(!Adjacent(user)) @@ -350,13 +345,15 @@ UpdateName() to_chat(user, "Name changed to [new_name].") + // This option is now disabled. I had to comment out the front/side lines. + // It didn't work anyway, so nothing of value was lost! if("Photo") if(!Adjacent(user)) return photo = fake_id_photo(user) var/icon/photoside = fake_id_photo(user,1) - front = new(photo) - side = new(photoside) + // front = new(photo) + // side = new(photoside) if(photo && photoside) to_chat(user, "Photo changed.") diff --git a/code/modules/computer3/computers/medical.dm b/code/modules/computer3/computers/medical.dm index 5d283af5b53..b3feb23c6a5 100644 --- a/code/modules/computer3/computers/medical.dm +++ b/code/modules/computer3/computers/medical.dm @@ -86,10 +86,6 @@ if(3.0) dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src) if(4.0) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - usr << browse_rsc(front, "front.png") - usr << browse_rsc(side, "side.png") dat += "
Medical Record

" if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) dat += "
Name: [active1.fields["name"]] \ @@ -99,7 +95,8 @@ Fingerprint: [active1.fields["fingerprint"]]
\n \ Physical Status: [active1.fields["p_stat"]]
\n \ Mental Status: [active1.fields["m_stat"]]
\ - Photo:
" + Photo:
\ + " else dat += "General Record Lost!
" if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm index ebb218b5cee..57e8de72a79 100644 --- a/code/modules/computer3/computers/security.dm +++ b/code/modules/computer3/computers/security.dm @@ -127,10 +127,6 @@ if(3.0) dat += "
Security Record

" if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - usr << browse_rsc(front, "front.png") - usr << browse_rsc(side, "side.png") dat += text(" \ -
\ Name: [active1.fields["name"]]
\ ID: [active1.fields["id"]]
\n \ @@ -140,8 +136,8 @@ Fingerprint: [active1.fields["fingerprint"]]
\n \ Physical Status: [active1.fields["p_stat"]]
\n \ Mental Status: [active1.fields["m_stat"]]
Photo:
\ -
") + Photo:
\ + ") else dat += "General Record Lost!
" if ((istype(active2, /datum/data/record) && data_core.security.Find(active2))) From 545401159397346c11eeecd5a49b8fcb158c44d6 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 6 Jul 2016 23:47:08 -0700 Subject: [PATCH 12/23] Fixes trialmin bug, adds ERT response reminder --- code/game/response_team.dm | 2 ++ code/modules/admin/topic.dm | 2 +- code/modules/admin/verbs/pray.dm | 6 ++++-- .../security_levels/keycard authentication.dm | 15 ++++++++++++--- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index d9b8cfcc375..c16c6475f8d 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -9,6 +9,7 @@ var/list/response_team_members = list() var/responseteam_age = 21 // Minimum account age to play as an ERT member var/datum/response_team/active_team = null var/send_emergency_team +var/ert_request_answered = 0 /client/proc/response_team() set name = "Dispatch CentComm Response Team" @@ -47,6 +48,7 @@ var/send_emergency_team if(!ert_type) return + ert_request_answered = 1 message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team", 1) log_admin("[key_name(usr)] used Dispatch Emergency Response Team..") trigger_armed_response_team(ert_type) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 59278124aa0..2be62321e71 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1854,7 +1854,7 @@ var/input = input(src.owner, "Please enter a reason for denying [key_name(H)]'s ERT request.","Outgoing message from CentComm", "") if(!input) return - + ert_request_answered = 1 to_chat(src.owner, "You sent [input] to [H] via a secure channel.") log_admin("[src.owner] denied [key_name(H)]'s ERT request with the message [input].") to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Your ERT request has been denied for the following reasons: [input]. Message ends.\"") diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index caed1de43af..a9562268fdd 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -50,9 +50,11 @@ if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' -/proc/ERT_Announce(var/text , var/mob/Sender) +/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "\blue ERT REQUEST: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (REPLY): [msg]" + msg = "ERT REQUEST: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RESPOND): [msg]" + if (repeat_warning) + msg += "
WARNING: ERT request has gone 5 minutes with no reply!" for(var/client/X in admins) if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm index d27820ac033..2220b85f361 100644 --- a/code/modules/security_levels/keycard authentication.dm +++ b/code/modules/security_levels/keycard authentication.dm @@ -155,12 +155,21 @@ if(is_ert_blocked()) to_chat(usr, "\red All Emergency Response Teams are dispatched and can not be called at this time.") return - to_chat(usr, "ERT request transmitted.") - if(admins.len) - ERT_Announce(ert_reason , event_triggered_by) + + + var/fullmin_count = 0 + for(var/client/C in admins) + if (check_rights(R_EVENT, 0, C.mob)) + fullmin_count++ + if(fullmin_count) + ert_request_answered = 0 + ERT_Announce(ert_reason , event_triggered_by, 0) ert_reason = "Reason for ERT" feedback_inc("alert_keycard_auth_ert",1) + spawn(3000) + if (!ert_request_answered) + ERT_Announce(ert_reason , event_triggered_by, 1) else trigger_armed_response_team(new /datum/response_team/amber) // No admins? No problem. Automatically send a code amber ERT. From d6dd9075f37c2cf10e47394a81b7f02d0349a94a Mon Sep 17 00:00:00 2001 From: Krausus Date: Thu, 7 Jul 2016 10:21:58 -0400 Subject: [PATCH 13/23] Fixes agent ID HTML not updating --- code/game/objects/items/weapons/cards_ids.dm | 74 +++++++++++--------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 85c25d2b98a..68efca49825 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -162,19 +162,22 @@ dna_hash = H.dna.unique_enzymes fingerprint_hash = md5(H.dna.uni_identity) + RebuildHTML() + +/obj/item/weapon/card/id/proc/RebuildHTML() var/photo_front = "'data:image/png;base64,[icon2base64(icon(photo, dir = SOUTH))]'" var/photo_side = "'data:image/png;base64,[icon2base64(icon(photo, dir = WEST))]'" - dat = ("
") - dat += text("Name: []
", registered_name) - dat += text("Sex: []
\n", sex) - dat += text("Age: []
\n", age) - dat += text("Rank: []
\n", assignment) - dat += text("Fingerprint: []
\n", fingerprint_hash) - dat += text("Blood Type: []
\n", blood_type) - dat += text("DNA Hash: []

\n", dna_hash) - dat +="
Photo:
\ -
" + dat = {"
+ Name: [registered_name]
+ Sex: [sex]
+ Age: [age]
+ Rank: [assignment]
+ Fingerprint: [fingerprint_hash]
+ Blood Type: [blood_type]
+ DNA Hash: [dna_hash]

+
Photo:
+
"} /obj/item/weapon/card/id/GetAccess() if(!guest_pass) @@ -287,27 +290,22 @@ to_chat(usr, "The card's microscanners activate as you pass it over \the [I], copying its access.") src.access |= I.access //Don't copy access if user isn't an antag -- to prevent metagaming -/obj/item/weapon/card/id/syndicate/proc/fake_id_photo(var/mob/living/carbon/human/H, var/side=0)//get_id_photo wouldn't work correctly +/obj/item/weapon/card/id/syndicate/proc/fake_id_photo(var/mob/living/carbon/human/H)//get_id_photo wouldn't work correctly if(!istype(H)) return var/storedDir = H.dir //don't want to lose track of this - var/icon/faked - if(!side) - if(!H.equip_to_slot_if_possible(src, slot_l_store, 0, 1)) - to_chat(H, "You need to empty your pockets before taking the ID picture.") - return + var/icon/faked = new() + if(!H.equip_to_slot_if_possible(src, slot_l_store, 0, 1)) + to_chat(H, "You need to empty your pockets before taking the ID picture.") + return - if(side) - H.dir = WEST //ensure the icon is actually the proper direction before copying it - faked = getFlatIcon(H) - H.dir = storedDir //reset the user back to their original direction, not even noticable they changed - H.equip_to_slot_if_possible(src, slot_l_hand, 0, 1) - - else - H.dir = SOUTH - faked = getFlatIcon(H) - H.dir = storedDir + H.dir = WEST //ensure the icon is actually the proper direction before copying it + faked.Insert(getFlatIcon(H), dir = WEST) + H.dir = SOUTH + faked.Insert(getFlatIcon(H), dir = SOUTH) + H.dir = storedDir + H.equip_to_slot_if_possible(src, slot_l_hand, 0, 1) return faked @@ -336,7 +334,7 @@ if("Show") return ..() if("Edit") - switch(input(user,"What would you like to edit on \the [src]?") in list("Name","Appearance","Sex","Age","Occupation","Money Account","Blood Type","DNA Hash","Fingerprint Hash","Reset Card")) + switch(input(user,"What would you like to edit on \the [src]?") in list("Name","Photo","Appearance","Sex","Age","Occupation","Money Account","Blood Type","DNA Hash","Fingerprint Hash","Reset Card")) if("Name") var/new_name = reject_bad_name(input(user,"What name would you like to put on this card?","Agent Card Name", ishuman(user) ? user.real_name : user.name)) if(!Adjacent(user)) @@ -344,18 +342,17 @@ src.registered_name = new_name UpdateName() to_chat(user, "Name changed to [new_name].") + RebuildHTML() - // This option is now disabled. I had to comment out the front/side lines. - // It didn't work anyway, so nothing of value was lost! if("Photo") if(!Adjacent(user)) return - photo = fake_id_photo(user) - var/icon/photoside = fake_id_photo(user,1) - // front = new(photo) - // side = new(photoside) - if(photo && photoside) - to_chat(user, "Photo changed.") + var/icon/newphoto = fake_id_photo(user) + if(!newphoto) + return + photo = newphoto + to_chat(user, "Photo changed.") + RebuildHTML() if("Appearance") var/list/appearances = list( @@ -400,6 +397,7 @@ return src.sex = new_sex to_chat(user, "Sex changed to [new_sex].") + RebuildHTML() if("Age") var/new_age = sanitize(stripped_input(user,"What age would you like to put on this card?","Agent Card Age","21", MAX_MESSAGE_LEN)) @@ -407,6 +405,7 @@ return src.age = new_age to_chat(user, "Age changed to [new_age].") + RebuildHTML() if("Occupation") var/new_job = sanitize(stripped_input(user,"What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.","Agent Card Occupation", "Civilian", MAX_MESSAGE_LEN)) @@ -415,6 +414,7 @@ src.assignment = new_job to_chat(user, "Occupation changed to [new_job].") UpdateName() + RebuildHTML() if("Money Account") var/new_account = input(user,"What money account would you like to link to this card?","Agent Card Account",12345) as num @@ -435,6 +435,7 @@ return src.blood_type = new_blood_type to_chat(user, "Blood type changed to [new_blood_type].") + RebuildHTML() if("DNA Hash") var/default = "\[UNSET\]" @@ -448,6 +449,7 @@ return src.dna_hash = new_dna_hash to_chat(user, "DNA hash changed to [new_dna_hash].") + RebuildHTML() if("Fingerprint Hash") var/default = "\[UNSET\]" @@ -461,6 +463,7 @@ return src.fingerprint_hash = new_fingerprint_hash to_chat(user, "Fingerprint hash changed to [new_fingerprint_hash].") + RebuildHTML() if("Reset Card") name = initial(name) @@ -477,6 +480,7 @@ registered_user = null to_chat(user, "All information has been deleted from \the [src].") + RebuildHTML() else ..() From bea31f317965df298e2562175764f5ce1dacc150 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 16:43:24 -0400 Subject: [PATCH 14/23] Automatic changelog generation for PR #4912 --- html/changelogs/AutoChangeLog-pr-4912.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4912.yml diff --git a/html/changelogs/AutoChangeLog-pr-4912.yml b/html/changelogs/AutoChangeLog-pr-4912.yml new file mode 100644 index 00000000000..865ac6931dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4912.yml @@ -0,0 +1,5 @@ +author: Kyep +delete-after: True +changes: + - bugfix: "Fixed oversight in keycard authentication devices that incorrectly treated trialmins like fullmins, resulting in situations where calling an ERT became impossible." + - tweak: "If an ERT request gets no answer for 5 minutes, admins now get a one time reminder that it was sent." From bf97444085cf915fb2b95d6c052c3744223a5e64 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 16:47:00 -0400 Subject: [PATCH 15/23] Automatic changelog generation for PR #4910 --- html/changelogs/AutoChangeLog-pr-4910.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4910.yml diff --git a/html/changelogs/AutoChangeLog-pr-4910.yml b/html/changelogs/AutoChangeLog-pr-4910.yml new file mode 100644 index 00000000000..94574d183cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4910.yml @@ -0,0 +1,5 @@ +author: Krausus +delete-after: True +changes: + - bugfix: "Security and medical records should probably stop crashing people." + - bugfix: "Altering details on an Agent ID Card will now actually update what's seen when examining the card." From 5ca647b795f35a36b4e8f995184baacb812e1f29 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 16:47:34 -0400 Subject: [PATCH 16/23] Automatic changelog generation for PR #4906 --- html/changelogs/AutoChangeLog-pr-4906.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4906.yml diff --git a/html/changelogs/AutoChangeLog-pr-4906.yml b/html/changelogs/AutoChangeLog-pr-4906.yml new file mode 100644 index 00000000000..89997172467 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4906.yml @@ -0,0 +1,5 @@ +author: TullyBurnalot +delete-after: True +changes: + - bugfix: "Fixed clown door deconstruction" + - bugfix: "Fixed mime door deconstruction" From 61e0d6cd5f58d0dd227e6c1947fdc5fcc123273d Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 16:47:48 -0400 Subject: [PATCH 17/23] Automatic changelog generation for PR #4905 --- html/changelogs/AutoChangeLog-pr-4905.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4905.yml diff --git a/html/changelogs/AutoChangeLog-pr-4905.yml b/html/changelogs/AutoChangeLog-pr-4905.yml new file mode 100644 index 00000000000..ba85782c277 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4905.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - bugfix: "Fixes sechuds and nightvision sechuds having flash protection" From 6dcbbe3a47562cbac25576a5219374a3ab15b22f Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 16:49:26 -0400 Subject: [PATCH 18/23] Automatic changelog generation for PR #4883 --- html/changelogs/AutoChangeLog-pr-4883.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4883.yml diff --git a/html/changelogs/AutoChangeLog-pr-4883.yml b/html/changelogs/AutoChangeLog-pr-4883.yml new file mode 100644 index 00000000000..d04e82d0b61 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4883.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - rscadd: "Can now pet pAI's with help intent" From 598dd424d35a3dd3022b7c256198b4f587e3205a Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Thu, 7 Jul 2016 13:51:02 -0700 Subject: [PATCH 19/23] CHANGELOGGU --- html/changelog.html | 69 +++++++++++++++++++++++ html/changelogs/.all_changelog.yml | 65 +++++++++++++++++++++ html/changelogs/AutoChangeLog-pr-4852.yml | 5 -- html/changelogs/AutoChangeLog-pr-4857.yml | 4 -- html/changelogs/AutoChangeLog-pr-4860.yml | 9 --- html/changelogs/AutoChangeLog-pr-4861.yml | 4 -- html/changelogs/AutoChangeLog-pr-4867.yml | 10 ---- html/changelogs/AutoChangeLog-pr-4869.yml | 7 --- html/changelogs/AutoChangeLog-pr-4870.yml | 4 -- html/changelogs/AutoChangeLog-pr-4874.yml | 4 -- html/changelogs/AutoChangeLog-pr-4875.yml | 4 -- html/changelogs/AutoChangeLog-pr-4883.yml | 4 -- html/changelogs/AutoChangeLog-pr-4887.yml | 4 -- html/changelogs/AutoChangeLog-pr-4892.yml | 4 -- html/changelogs/AutoChangeLog-pr-4896.yml | 7 --- html/changelogs/AutoChangeLog-pr-4900.yml | 5 -- html/changelogs/AutoChangeLog-pr-4905.yml | 4 -- html/changelogs/AutoChangeLog-pr-4906.yml | 5 -- html/changelogs/AutoChangeLog-pr-4910.yml | 5 -- html/changelogs/AutoChangeLog-pr-4912.yml | 5 -- 20 files changed, 134 insertions(+), 94 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-4852.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4857.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4860.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4861.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4867.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4869.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4870.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4874.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4875.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4883.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4887.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4892.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4896.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4900.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4905.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4906.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4910.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4912.yml diff --git a/html/changelog.html b/html/changelog.html index d7c76ff989f..d6e55c2a642 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,75 @@ -->
+

07 July 2016

+

Ar3nn updated:

+
    +
  • Adds tech levels to RnD console main menu
  • +
+

FalseIncarnate updated:

+
    +
  • Chicks no longer lose their souls (literally) when becoming adults.
  • +
  • Intercoms, fire alarms, and air alarms no longer contain internal portals to a realm of infinite cables and circuit boards.
  • +
+

Fox McCloud updated:

+
    +
  • Space lube damage removed and duration reduced from 7 to 5
  • +
  • Azide and CLF3+Firefighting foam now play a bang sound when mixed
  • +
  • Can now pet pAI's with help intent
  • +
  • Fixes sechuds and nightvision sechuds having flash protection
  • +
+

FreeStylaLT updated:

+
    +
  • Added windows and a missing firelock to Genetics/Cloning
  • +
  • Tweaked layout of Genetics slightly
  • +
  • Added photocopier to R&D.
  • +
  • Tweaked RD's office layout slightly
  • +
  • Changed access on Tcomms' external airlocks' buttons to be same as general Tcomms access
  • +
  • fixed the airless tiles in Assembly Line's windows
  • +
+

KasparoVy updated:

+
    +
  • Adds improved Vox mask/goggle sprites.
  • +
  • Adds Vox-compatible versions of most suits.
  • +
  • Adds species-fitting and icon override handling to clothing accessories and suit collars.
  • +
  • You can now open/close Clown Officer and Soldier coats.
  • +
  • Adds by-species tail hiding.
  • +
  • Tidies up and refactors the way the Captain's space helmet shows Vox hair but hides every other species'.
  • +
  • Reactive armour's sprite will now update as soon as you turn it on/off or EMP it.
  • +
+

Krausus updated:

+
    +
  • Fixed borers dying in hosts who happened to be somewhere cold, such as space. Even if their host was in a space suit.
  • +
  • Fixed borers forgetting to detach from a host when it died.
  • +
  • Fixed borers being able to assume control of a dead host.
  • +
  • Fixed dead borers in a host being able to speak with the host and ghosts.
  • +
  • Fixed employees starting every shift at least 3 minutes late. You aren't getting paid to stand around, people!
  • +
  • Fixed animal beatdowns being twice as noisy as they should be.
  • +
  • Pod lock busters should now properly bust pod locks.
  • +
  • The late-stage effects of the "sensory destruction" disease symptom should now properly destroy your senses.
  • +
  • Autotraitor should now continue picking new in-game traitors, instead of picking one and dying.
  • +
  • Lacking a head no longer makes you immune to becoming a husk or skeleton.
  • +
  • Security and medical records should probably stop crashing people.
  • +
  • Altering details on an Agent ID Card will now actually update what's seen when examining the card.
  • +
+

Kyep updated:

+
    +
  • Fixes NT Special Ops Officer's headset so he can correctly hear, and talk on, the Special Ops (deathsquad) channel.
  • +
  • Fixed oversight in keycard authentication devices that incorrectly treated trialmins like fullmins, resulting in situations where calling an ERT became impossible.
  • +
  • If an ERT request gets no answer for 5 minutes, admins now get a one time reminder that it was sent.
  • +
+

TheDZD updated:

+
    +
  • Burst fire selection is now a proc, as it was meant to be, rather than a verb.
  • +
+

TullyBurnalot updated:

+
    +
  • AI can no longer interact with IV Drips
  • +
  • Robots can no longer remove beakers/blood bags from IV Drips
  • +
  • Fixed clown door deconstruction
  • +
  • Fixed mime door deconstruction
  • +
+

02 July 2016

Fethas updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index cecfb4eff2a..3c913da0a8d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1999,3 +1999,68 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: There's a new tab in the character setup screen, "loadouts". This allows you to spawn with a limited number of preset items. - tweak: 'Character setup now uses #defines for the different tabs.' +2016-07-07: + Ar3nn: + - tweak: Adds tech levels to RnD console main menu + FalseIncarnate: + - bugfix: Chicks no longer lose their souls (literally) when becoming adults. + - bugfix: Intercoms, fire alarms, and air alarms no longer contain internal portals + to a realm of infinite cables and circuit boards. + Fox McCloud: + - tweak: Space lube damage removed and duration reduced from 7 to 5 + - tweak: Azide and CLF3+Firefighting foam now play a bang sound when mixed + - rscadd: Can now pet pAI's with help intent + - bugfix: Fixes sechuds and nightvision sechuds having flash protection + FreeStylaLT: + - rscadd: Added windows and a missing firelock to Genetics/Cloning + - tweak: Tweaked layout of Genetics slightly + - rscadd: Added photocopier to R&D. + - tweak: Tweaked RD's office layout slightly + - tweak: Changed access on Tcomms' external airlocks' buttons to be same as general + Tcomms access + - bugfix: fixed the airless tiles in Assembly Line's windows + KasparoVy: + - imageadd: Adds improved Vox mask/goggle sprites. + - imageadd: Adds Vox-compatible versions of most suits. + - rscadd: Adds species-fitting and icon override handling to clothing accessories + and suit collars. + - rscadd: You can now open/close Clown Officer and Soldier coats. + - rscadd: Adds by-species tail hiding. + - tweak: Tidies up and refactors the way the Captain's space helmet shows Vox hair + but hides every other species'. + - bugfix: Reactive armour's sprite will now update as soon as you turn it on/off + or EMP it. + Krausus: + - bugfix: Fixed borers dying in hosts who happened to be somewhere cold, such as + space. Even if their host was in a space suit. + - bugfix: Fixed borers forgetting to detach from a host when it died. + - bugfix: Fixed borers being able to assume control of a dead host. + - bugfix: Fixed dead borers in a host being able to speak with the host and ghosts. + - bugfix: Fixed employees starting every shift at least 3 minutes late. You aren't + getting paid to stand around, people! + - bugfix: Fixed animal beatdowns being twice as noisy as they should be. + - bugfix: Pod lock busters should now properly bust pod locks. + - bugfix: The late-stage effects of the "sensory destruction" disease symptom should + now properly destroy your senses. + - bugfix: Autotraitor should now continue picking new in-game traitors, instead + of picking one and dying. + - bugfix: Lacking a head no longer makes you immune to becoming a husk or skeleton. + - bugfix: Security and medical records should probably stop crashing people. + - bugfix: Altering details on an Agent ID Card will now actually update what's seen + when examining the card. + Kyep: + - tweak: Fixes NT Special Ops Officer's headset so he can correctly hear, and talk + on, the Special Ops (deathsquad) channel. + - bugfix: Fixed oversight in keycard authentication devices that incorrectly treated + trialmins like fullmins, resulting in situations where calling an ERT became + impossible. + - tweak: If an ERT request gets no answer for 5 minutes, admins now get a one time + reminder that it was sent. + TheDZD: + - bugfix: Burst fire selection is now a proc, as it was meant to be, rather than + a verb. + TullyBurnalot: + - tweak: AI can no longer interact with IV Drips + - tweak: Robots can no longer remove beakers/blood bags from IV Drips + - bugfix: Fixed clown door deconstruction + - bugfix: Fixed mime door deconstruction diff --git a/html/changelogs/AutoChangeLog-pr-4852.yml b/html/changelogs/AutoChangeLog-pr-4852.yml deleted file mode 100644 index ca5e7c360c0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4852.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: FalseIncarnate -delete-after: True -changes: - - bugfix: "Chicks no longer lose their souls (literally) when becoming adults." - - bugfix: "Intercoms, fire alarms, and air alarms no longer contain internal portals to a realm of infinite cables and circuit boards." diff --git a/html/changelogs/AutoChangeLog-pr-4857.yml b/html/changelogs/AutoChangeLog-pr-4857.yml deleted file mode 100644 index aa0932f40bb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4857.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - tweak: "Space lube damage removed and duration reduced from 7 to 5" diff --git a/html/changelogs/AutoChangeLog-pr-4860.yml b/html/changelogs/AutoChangeLog-pr-4860.yml deleted file mode 100644 index a73d8e3e94e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4860.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: FreeStylaLT -delete-after: True -changes: - - rscadd: "Added windows and a missing firelock to Genetics/Cloning" - - tweak: "Tweaked layout of Genetics slightly" - - rscadd: "Added photocopier to R&D." - - tweak: "Tweaked RD's office layout slightly" - - tweak: "Changed access on Tcomms' external airlocks' buttons to be same as general Tcomms access" - - bugfix: "fixed the airless tiles in Assembly Line's windows" diff --git a/html/changelogs/AutoChangeLog-pr-4861.yml b/html/changelogs/AutoChangeLog-pr-4861.yml deleted file mode 100644 index a8b51ba3041..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4861.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - tweak: "Azide and CLF3+Firefighting foam now play a bang sound when mixed" diff --git a/html/changelogs/AutoChangeLog-pr-4867.yml b/html/changelogs/AutoChangeLog-pr-4867.yml deleted file mode 100644 index a428215d37e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4867.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: KasparoVy -delete-after: True -changes: - - imageadd: "Adds improved Vox mask/goggle sprites." - - imageadd: "Adds Vox-compatible versions of most suits." - - rscadd: "Adds species-fitting and icon override handling to clothing accessories and suit collars." - - rscadd: "You can now open/close Clown Officer and Soldier coats." - - rscadd: "Adds by-species tail hiding." - - tweak: "Tidies up and refactors the way the Captain's space helmet shows Vox hair but hides every other species'." - - bugfix: "Reactive armour's sprite will now update as soon as you turn it on/off or EMP it." diff --git a/html/changelogs/AutoChangeLog-pr-4869.yml b/html/changelogs/AutoChangeLog-pr-4869.yml deleted file mode 100644 index 9ba17868790..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4869.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Krausus -delete-after: True -changes: - - bugfix: "Fixed borers dying in hosts who happened to be somewhere cold, such as space. Even if their host was in a space suit." - - bugfix: "Fixed borers forgetting to detach from a host when it died." - - bugfix: "Fixed borers being able to assume control of a dead host." - - bugfix: "Fixed dead borers in a host being able to speak with the host and ghosts." diff --git a/html/changelogs/AutoChangeLog-pr-4870.yml b/html/changelogs/AutoChangeLog-pr-4870.yml deleted file mode 100644 index 536ce2068ce..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4870.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Kyep -delete-after: True -changes: - - tweak: "Fixes NT Special Ops Officer's headset so he can correctly hear, and talk on, the Special Ops (deathsquad) channel." diff --git a/html/changelogs/AutoChangeLog-pr-4874.yml b/html/changelogs/AutoChangeLog-pr-4874.yml deleted file mode 100644 index 82b0746382f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4874.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Krausus -delete-after: True -changes: - - bugfix: "Fixed employees starting every shift at least 3 minutes late. You aren't getting paid to stand around, people!" diff --git a/html/changelogs/AutoChangeLog-pr-4875.yml b/html/changelogs/AutoChangeLog-pr-4875.yml deleted file mode 100644 index 061bed841c5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4875.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Ar3nn -delete-after: True -changes: - - tweak: "Adds tech levels to RnD console main menu" diff --git a/html/changelogs/AutoChangeLog-pr-4883.yml b/html/changelogs/AutoChangeLog-pr-4883.yml deleted file mode 100644 index d04e82d0b61..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4883.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - rscadd: "Can now pet pAI's with help intent" diff --git a/html/changelogs/AutoChangeLog-pr-4887.yml b/html/changelogs/AutoChangeLog-pr-4887.yml deleted file mode 100644 index e5316661cb2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4887.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Krausus -delete-after: True -changes: - - bugfix: "Fixed animal beatdowns being twice as noisy as they should be." diff --git a/html/changelogs/AutoChangeLog-pr-4892.yml b/html/changelogs/AutoChangeLog-pr-4892.yml deleted file mode 100644 index e75ed2e3253..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4892.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: TheDZD -delete-after: True -changes: - - bugfix: "Burst fire selection is now a proc, as it was meant to be, rather than a verb." diff --git a/html/changelogs/AutoChangeLog-pr-4896.yml b/html/changelogs/AutoChangeLog-pr-4896.yml deleted file mode 100644 index e7fff21c3d5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4896.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Krausus -delete-after: True -changes: - - bugfix: "Pod lock busters should now properly bust pod locks." - - bugfix: "The late-stage effects of the \"sensory destruction\" disease symptom should now properly destroy your senses." - - bugfix: "Autotraitor should now continue picking new in-game traitors, instead of picking one and dying." - - bugfix: "Lacking a head no longer makes you immune to becoming a husk or skeleton." diff --git a/html/changelogs/AutoChangeLog-pr-4900.yml b/html/changelogs/AutoChangeLog-pr-4900.yml deleted file mode 100644 index 9cb1d0bae54..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4900.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: TullyBurnalot -delete-after: True -changes: - - tweak: "AI can no longer interact with IV Drips" - - tweak: "Robots can no longer remove beakers/blood bags from IV Drips" diff --git a/html/changelogs/AutoChangeLog-pr-4905.yml b/html/changelogs/AutoChangeLog-pr-4905.yml deleted file mode 100644 index ba85782c277..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4905.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - bugfix: "Fixes sechuds and nightvision sechuds having flash protection" diff --git a/html/changelogs/AutoChangeLog-pr-4906.yml b/html/changelogs/AutoChangeLog-pr-4906.yml deleted file mode 100644 index 89997172467..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4906.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: TullyBurnalot -delete-after: True -changes: - - bugfix: "Fixed clown door deconstruction" - - bugfix: "Fixed mime door deconstruction" diff --git a/html/changelogs/AutoChangeLog-pr-4910.yml b/html/changelogs/AutoChangeLog-pr-4910.yml deleted file mode 100644 index 94574d183cb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4910.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Krausus -delete-after: True -changes: - - bugfix: "Security and medical records should probably stop crashing people." - - bugfix: "Altering details on an Agent ID Card will now actually update what's seen when examining the card." diff --git a/html/changelogs/AutoChangeLog-pr-4912.yml b/html/changelogs/AutoChangeLog-pr-4912.yml deleted file mode 100644 index 865ac6931dc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4912.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Kyep -delete-after: True -changes: - - bugfix: "Fixed oversight in keycard authentication devices that incorrectly treated trialmins like fullmins, resulting in situations where calling an ERT became impossible." - - tweak: "If an ERT request gets no answer for 5 minutes, admins now get a one time reminder that it was sent." From ce11da030441b405d26165284ba69922ce585f9b Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 22:14:57 -0400 Subject: [PATCH 20/23] Automatic changelog generation for PR #4907 --- html/changelogs/AutoChangeLog-pr-4907.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4907.yml diff --git a/html/changelogs/AutoChangeLog-pr-4907.yml b/html/changelogs/AutoChangeLog-pr-4907.yml new file mode 100644 index 00000000000..b71cfbda7b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4907.yml @@ -0,0 +1,4 @@ +author: TullyBurnalot +delete-after: True +changes: + - rscdel: "Botanist access to the morgue revoked" From af5987918c6b61f70564966c5d9fe7dd5314275d Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 7 Jul 2016 22:26:59 -0400 Subject: [PATCH 21/23] Automatic changelog generation for PR #4797 --- html/changelogs/AutoChangeLog-pr-4797.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4797.yml diff --git a/html/changelogs/AutoChangeLog-pr-4797.yml b/html/changelogs/AutoChangeLog-pr-4797.yml new file mode 100644 index 00000000000..3476b7eb826 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4797.yml @@ -0,0 +1,6 @@ +author: TheDZD +delete-after: True +changes: + - bugfix: "DNA injectors no longer always activate powers that are supposed to have a chance to activate." + - tweak: "Dionae can no longer activate the radiation disability, nor the run superpower except via adminbus." + - rscadd: "Adds genetic instability, which causes a variety of negative effects, including toxin damage, burn damage, cloneloss, and even gibbing. Effects get worse as stability gets lower, burn damage starts below 85 stability, tox and clone below 70, and gibbing once you're below 40." From dc408f090d9338ebe21598c28bb4f1971608de07 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 19 Jun 2016 10:46:57 -0700 Subject: [PATCH 22/23] Contributing guidelines --- .github/CONTRIBUTING.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cc17a9975c7..0e5b5ad3208 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -58,6 +58,9 @@ actual development. be a new proc that they both can use. - No magic numbers/strings. If you have a number or text that is important and used in your code, make a `#DEFINE` statement with a name that clearly indicates it's use. + - `if(condition)` must be used over `if (condition)` or any other variation. + - The same applies for `while` and `for` loops, they must have no space between the + keyword and condition brackets. `while(condition)`, `for(condition)` - If you want to output a message to a player's chat (this includes text sent to `world`), use `to_chat(mob/client/world, "message")`. Do not use `mob/client/world << "message"`. From 71e5344a983c85cd9bc315868ec9f869770f28b7 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Thu, 7 Jul 2016 19:34:02 -0700 Subject: [PATCH 23/23] Mass replace --- code/ATMOSPHERICS/atmospherics.dm | 8 +- .../binary_devices/binary_atmos_base.dm | 4 +- .../components/binary_devices/dp_vent_pump.dm | 6 +- .../components/binary_devices/passive_gate.dm | 4 +- .../components/binary_devices/pump.dm | 4 +- .../components/binary_devices/valve.dm | 2 +- .../components/binary_devices/volume_pump.dm | 4 +- .../components/omni_devices/filter.dm | 2 +- .../components/omni_devices/mixer.dm | 2 +- .../components/omni_devices/omni_base.dm | 2 +- .../components/trinary_devices/filter.dm | 6 +- .../unary_devices/outlet_injector.dm | 2 +- .../components/unary_devices/thermal_plate.dm | 8 +- .../components/unary_devices/unary_base.dm | 2 +- .../components/unary_devices/vent_pump.dm | 22 +- .../components/unary_devices/vent_scrubber.dm | 38 +- code/ATMOSPHERICS/pipes/cap.dm | 2 +- code/ATMOSPHERICS/pipes/manifold.dm | 4 +- code/ATMOSPHERICS/pipes/manifold4w.dm | 4 +- code/ATMOSPHERICS/pipes/simple/pipe_simple.dm | 4 +- .../pipes/simple/pipe_simple_he.dm | 10 +- .../pipes/simple/pipe_simple_hidden.dm | 4 +- .../pipes/simple/pipe_simple_visible.dm | 4 +- code/LINDA/LINDA_fire.dm | 2 +- code/LINDA/LINDA_system.dm | 16 +- code/LINDA/LINDA_turf_tile.dm | 6 +- code/__DEFINES/tick.dm | 2 +- code/__HELPERS/AnimationLibrary.dm | 2 +- code/__HELPERS/experimental.dm | 14 +- code/__HELPERS/game.dm | 4 +- code/__HELPERS/global_lists.dm | 4 +- code/__HELPERS/icons.dm | 10 +- code/__HELPERS/lists.dm | 50 +-- code/__HELPERS/logging.dm | 26 +- code/__HELPERS/mobs.dm | 18 +- code/__HELPERS/names.dm | 22 +- code/__HELPERS/sanitize_values.dm | 2 +- code/__HELPERS/text.dm | 18 +- code/__HELPERS/timed_alerts.dm | 8 +- code/__HELPERS/type2type.dm | 2 +- code/__HELPERS/unsorted.dm | 94 ++--- code/_hooks/hooks.dm | 16 +- code/_onclick/hud/screen_objects.dm | 14 +- code/_onclick/item_attack.dm | 12 +- code/_onclick/oldcode.dm | 78 ++-- .../ProcessScheduler/core/process.dm | 18 +- .../ProcessScheduler/core/processScheduler.dm | 52 +-- code/controllers/communications.dm | 24 +- code/controllers/configuration.dm | 160 ++++---- code/controllers/failsafe.dm | 4 +- code/controllers/verbs.dm | 2 +- code/controllers/voting.dm | 2 +- code/datums/ai_laws.dm | 10 +- code/datums/browser.dm | 20 +- code/datums/cache/apc.dm | 2 +- code/datums/cache/crew.dm | 2 +- code/datums/datacore.dm | 6 +- code/datums/datumvars.dm | 48 +-- .../diseases/advance/symptoms/oxygen.dm | 2 +- .../diseases/advance/symptoms/stimulant.dm | 2 +- .../diseases/advance/symptoms/vision.dm | 2 +- code/datums/diseases/berserker.dm | 8 +- code/datums/diseases/dna_spread.dm | 2 +- code/datums/diseases/kuru.dm | 2 +- code/datums/diseases/retrovirus.dm | 20 +- code/datums/diseases/transformation.dm | 22 +- .../helper_datums/construction_datum.dm | 2 +- code/datums/mind.dm | 276 +++++++------- code/datums/progressbar.dm | 16 +- code/datums/recipe.dm | 36 +- code/datums/spell.dm | 2 +- code/datums/spells/ethereal_jaunt.dm | 2 +- code/datums/spells/inflict_handler.dm | 4 +- code/datums/uplink_item.dm | 6 +- code/datums/wires/airlock.dm | 2 +- code/datums/wires/alarm.dm | 16 +- code/datums/wires/apc.dm | 10 +- code/datums/wires/nuclearbomb.dm | 4 +- code/datums/wires/robot.dm | 16 +- code/datums/wires/syndicatebomb.dm | 12 +- code/defines/procs/announce.dm | 6 +- code/defines/procs/radio.dm | 2 +- code/game/area/Space Station 13 areas.dm | 2 +- code/game/area/ai_monitored.dm | 6 +- code/game/area/areas.dm | 30 +- code/game/atoms.dm | 8 +- code/game/atoms_movable.dm | 44 +-- code/game/data_huds.dm | 4 +- code/game/dna/dna2.dm | 32 +- code/game/dna/dna2_helpers.dm | 16 +- code/game/dna/dna_modifier.dm | 168 ++++----- code/game/dna/genes/goon_powers.dm | 44 +-- code/game/dna/genes/monkey.dm | 2 +- code/game/dna/genes/powers.dm | 2 +- code/game/dna/genes/vg_powers.dm | 8 +- .../game/gamemodes/autotraitor/autotraitor.dm | 16 +- code/game/gamemodes/blob/blob.dm | 8 +- code/game/gamemodes/blob/blob_report.dm | 4 +- code/game/gamemodes/blob/overmind.dm | 14 +- code/game/gamemodes/borer/borer.dm | 4 +- code/game/gamemodes/changeling/changeling.dm | 14 +- .../gamemodes/changeling/evolution_menu.dm | 4 +- code/game/gamemodes/cult/cult.dm | 22 +- code/game/gamemodes/cult/ritual.dm | 48 +-- code/game/gamemodes/cult/runes.dm | 70 ++-- code/game/gamemodes/cult/talisman.dm | 22 +- code/game/gamemodes/game_mode.dm | 4 +- code/game/gamemodes/gameticker.dm | 46 +-- code/game/gamemodes/intercept_report.dm | 6 +- .../gamemodes/malfunction/Malf_Modules.dm | 6 +- .../game/gamemodes/malfunction/malfunction.dm | 40 +- code/game/gamemodes/meteor/meteors.dm | 2 +- .../miniantags/abduction/abduction.dm | 2 +- .../miniantags/abduction/abduction_gear.dm | 2 +- code/game/gamemodes/miniantags/borer/borer.dm | 14 +- .../miniantags/bot_swarm/swarmer_event.dm | 2 +- .../gamemodes/miniantags/guardian/guardian.dm | 20 +- .../miniantags/slaughter/bloodcrawl.dm | 2 +- code/game/gamemodes/mutiny/auth_key.dm | 6 +- .../directives/alien_fraud_directive.dm | 4 +- .../bluespace_contagion_directive.dm | 2 +- .../directives/financial_crisis_directive.dm | 2 +- .../mutiny/directives/ipc_virus_directive.dm | 10 +- .../research_to_ripleys_directive.dm | 6 +- .../tau_ceti_needs_women_directive.dm | 4 +- .../directives/terminations_directive.dm | 10 +- code/game/gamemodes/mutiny/key_pinpointer.dm | 8 +- code/game/gamemodes/mutiny/mutiny.dm | 30 +- code/game/gamemodes/mutiny/mutiny_fluff.dm | 8 +- code/game/gamemodes/mutiny/mutiny_hooks.dm | 8 +- code/game/gamemodes/nations/nations.dm | 2 +- code/game/gamemodes/nations/nationsprocs.dm | 8 +- code/game/gamemodes/newobjective.dm | 32 +- code/game/gamemodes/nuclear/nuclear.dm | 34 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 88 ++--- code/game/gamemodes/objective.dm | 16 +- code/game/gamemodes/revolution/revolution.dm | 16 +- code/game/gamemodes/scoreboard.dm | 6 +- code/game/gamemodes/setupgame.dm | 36 +- code/game/gamemodes/shadowling/shadowling.dm | 2 +- code/game/gamemodes/traitor/traitor.dm | 26 +- code/game/gamemodes/vampire/vampire.dm | 10 +- code/game/gamemodes/wizard/artefact.dm | 6 +- code/game/gamemodes/wizard/raginmages.dm | 4 +- code/game/gamemodes/wizard/rightandwrong.dm | 8 +- code/game/gamemodes/wizard/soulstone.dm | 14 +- code/game/gamemodes/wizard/spellbook.dm | 2 +- code/game/gamemodes/wizard/wizard.dm | 18 +- code/game/jobs/access.dm | 4 +- code/game/jobs/job/medical.dm | 4 +- code/game/jobs/job/support_chaplain.dm | 4 +- code/game/jobs/job_controller.dm | 4 +- code/game/jobs/whitelist.dm | 6 +- code/game/machinery/Freezer.dm | 18 +- code/game/machinery/OpTable.dm | 16 +- code/game/machinery/Sleeper.dm | 82 ++-- code/game/machinery/adv_med.dm | 52 +-- code/game/machinery/ai_slipper.dm | 30 +- code/game/machinery/alarm.dm | 86 ++--- code/game/machinery/atmoalter/canister.dm | 84 ++--- code/game/machinery/atmoalter/meter.dm | 10 +- .../atmoalter/portable_atmospherics.dm | 8 +- code/game/machinery/atmoalter/pump.dm | 8 +- code/game/machinery/atmoalter/scrubber.dm | 14 +- code/game/machinery/atmoalter/zvent.dm | 10 +- code/game/machinery/autolathe.dm | 26 +- code/game/machinery/bees_apiary.dm | 2 +- code/game/machinery/biogenerator.dm | 56 +-- code/game/machinery/buttons.dm | 6 +- code/game/machinery/camera/camera.dm | 12 +- code/game/machinery/camera/motion.dm | 34 +- code/game/machinery/camera/presets.dm | 4 +- code/game/machinery/camera/tracking.dm | 32 +- code/game/machinery/chiller.dm | 4 +- code/game/machinery/cloning.dm | 64 ++-- .../machinery/computer/HolodeckControl.dm | 16 +- code/game/machinery/computer/Operating.dm | 34 +- code/game/machinery/computer/ai_core.dm | 6 +- code/game/machinery/computer/aifixer.dm | 20 +- code/game/machinery/computer/arcade.dm | 28 +- code/game/machinery/computer/camera.dm | 4 +- .../machinery/computer/camera_advanced.dm | 6 +- code/game/machinery/computer/card.dm | 52 +-- code/game/machinery/computer/cloning.dm | 84 ++--- .../game/machinery/computer/communications.dm | 14 +- code/game/machinery/computer/computer.dm | 12 +- code/game/machinery/computer/hologram.dm | 36 +- code/game/machinery/computer/honkputer.dm | 16 +- code/game/machinery/computer/law.dm | 6 +- code/game/machinery/computer/medical.dm | 166 ++++---- code/game/machinery/computer/message.dm | 36 +- .../computer/pod_tracking_console.dm | 2 +- code/game/machinery/computer/robot.dm | 10 +- code/game/machinery/computer/security.dm | 154 ++++---- code/game/machinery/computer/skills.dm | 86 ++--- .../machinery/computer/specops_shuttle.dm | 22 +- code/game/machinery/computer/store.dm | 2 +- .../computer/syndicate_specops_shuttle.dm | 22 +- code/game/machinery/cryo.dm | 24 +- code/game/machinery/cryopod.dm | 12 +- code/game/machinery/deployable.dm | 38 +- code/game/machinery/door_control.dm | 8 +- code/game/machinery/doors/airlock.dm | 42 +-- code/game/machinery/doors/airlock_control.dm | 8 +- .../machinery/doors/airlock_electronics.dm | 36 +- code/game/machinery/doors/brigdoors.dm | 4 +- code/game/machinery/doors/poddoor.dm | 10 +- code/game/machinery/doors/windowdoor.dm | 28 +- code/game/machinery/dye_generator.dm | 2 +- .../airlock_controllers.dm | 6 +- .../airlock_docking_controller.dm | 10 +- .../airlock_docking_controller_multi.dm | 10 +- .../embedded_controller/airlock_program.dm | 6 +- .../embedded_controller/docking_program.dm | 92 ++--- .../docking_program_multi.dm | 82 ++-- .../embedded_program_base.dm | 2 +- .../simple_docking_controller.dm | 8 +- code/game/machinery/firealarm.dm | 42 +-- code/game/machinery/flasher.dm | 26 +- code/game/machinery/floodlight.dm | 10 +- code/game/machinery/guestpass.dm | 56 +-- code/game/machinery/hologram.dm | 8 +- code/game/machinery/holosign.dm | 8 +- code/game/machinery/igniter.dm | 20 +- code/game/machinery/iv_drip.dm | 6 +- code/game/machinery/kitchen/gibber.dm | 4 +- code/game/machinery/kitchen/icecream_vat.dm | 2 +- code/game/machinery/kitchen/juicer.dm | 44 +-- .../game/machinery/kitchen/kitchen_machine.dm | 92 ++--- code/game/machinery/kitchen/monkeyrecycler.dm | 6 +- code/game/machinery/kitchen/processor.dm | 20 +- code/game/machinery/kitchen/smartfridge.dm | 4 +- code/game/machinery/lightswitch.dm | 2 +- code/game/machinery/machinery.dm | 20 +- code/game/machinery/mass_driver.dm | 2 +- code/game/machinery/navbeacon.dm | 4 +- code/game/machinery/newscaster.dm | 22 +- code/game/machinery/pipe/construction.dm | 60 +-- code/game/machinery/pipe/pipe_dispenser.dm | 18 +- code/game/machinery/podmen.dm | 16 +- code/game/machinery/portable_tag_turret.dm | 2 +- code/game/machinery/portable_turret.dm | 16 +- code/game/machinery/programmable_unloader.dm | 12 +- code/game/machinery/recharger.dm | 2 +- code/game/machinery/rechargestation.dm | 16 +- code/game/machinery/recycler.dm | 4 +- code/game/machinery/requests_console.dm | 34 +- code/game/machinery/robot_fabricator.dm | 44 +-- code/game/machinery/shieldgen.dm | 22 +- code/game/machinery/slotmachine.dm | 20 +- code/game/machinery/spaceheater.dm | 4 +- code/game/machinery/suit_storage_unit.dm | 72 ++-- code/game/machinery/syndicatebomb.dm | 2 +- code/game/machinery/telecomms/broadcaster.dm | 68 ++-- code/game/machinery/telecomms/logbrowser.dm | 6 +- code/game/machinery/telecomms/telemonitor.dm | 6 +- .../machinery/telecomms/traffic_control.dm | 6 +- code/game/machinery/teleporter.dm | 34 +- code/game/machinery/transformer.dm | 2 +- code/game/machinery/turret_control.dm | 8 +- code/game/machinery/turrets.dm | 48 +-- code/game/machinery/vending.dm | 36 +- code/game/machinery/washing_machine.dm | 30 +- code/game/mecha/combat/durand.dm | 2 +- code/game/mecha/combat/gygax.dm | 2 +- code/game/mecha/combat/honker.dm | 4 +- code/game/mecha/combat/marauder.dm | 6 +- code/game/mecha/combat/phazon.dm | 4 +- code/game/mecha/equipment/tools/tools.dm | 6 +- code/game/mecha/equipment/weapons/weapons.dm | 8 +- code/game/mecha/mech_bay.dm | 2 +- code/game/mecha/mech_fabricator.dm | 4 +- code/game/mecha/mecha.dm | 40 +- code/game/mecha/mecha_construction_paths.dm | 6 +- code/game/mecha/mecha_control_console.dm | 2 +- code/game/mecha/mecha_wreckage.dm | 2 +- code/game/mecha/medical/odysseus.dm | 2 +- code/game/mecha/working/ripley.dm | 12 +- code/game/objects/buckling.dm | 2 +- code/game/objects/effects/aliens.dm | 4 +- .../effects/decals/Cleanable/humans.dm | 18 +- .../effects/decals/Cleanable/robots.dm | 10 +- code/game/objects/effects/decals/cleanable.dm | 2 +- code/game/objects/effects/effect_system.dm | 72 ++-- code/game/objects/effects/glowshroom.dm | 4 +- code/game/objects/effects/landmarks.dm | 4 +- code/game/objects/effects/portals.dm | 4 +- .../objects/effects/spawners/bombspawner.dm | 8 +- code/game/objects/effects/spiders.dm | 4 +- code/game/objects/explosion.dm | 4 +- code/game/objects/items.dm | 28 +- code/game/objects/items/ashtray.dm | 28 +- code/game/objects/items/blueprints.dm | 38 +- code/game/objects/items/bodybag.dm | 8 +- code/game/objects/items/changestone.dm | 2 +- code/game/objects/items/crayons.dm | 6 +- code/game/objects/items/devices/aicard.dm | 12 +- code/game/objects/items/devices/camera_bug.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 2 +- .../objects/items/devices/laserpointer.dm | 4 +- code/game/objects/items/devices/megaphone.dm | 4 +- code/game/objects/items/devices/modkit.dm | 12 +- code/game/objects/items/devices/paicard.dm | 4 +- .../objects/items/devices/pipe_painter.dm | 2 +- code/game/objects/items/devices/powersink.dm | 2 +- .../objects/items/devices/radio/beacon.dm | 4 +- .../objects/items/devices/radio/headset.dm | 12 +- .../objects/items/devices/radio/intercom.dm | 4 +- .../game/objects/items/devices/radio/radio.dm | 88 ++--- code/game/objects/items/devices/scanners.dm | 50 +-- .../objects/items/devices/transfer_valve.dm | 10 +- code/game/objects/items/devices/uplinks.dm | 8 +- code/game/objects/items/devices/whistle.dm | 2 +- .../items/mountable_frames/apc_frame.dm | 4 +- .../objects/items/mountable_frames/frames.dm | 6 +- .../objects/items/mountable_frames/lights.dm | 2 +- .../items/mountable_frames/mountables.dm | 4 +- .../mountable_frames/newscaster_frame.dm | 4 +- code/game/objects/items/policetape.dm | 20 +- code/game/objects/items/robot/robot_items.dm | 2 +- code/game/objects/items/robot/robot_parts.dm | 4 +- code/game/objects/items/shooting_range.dm | 4 +- code/game/objects/items/stacks/medical.dm | 36 +- code/game/objects/items/stacks/nanopaste.dm | 10 +- code/game/objects/items/stacks/rods.dm | 10 +- .../game/objects/items/stacks/sheets/glass.dm | 12 +- .../objects/items/stacks/sheets/sheets.dm | 4 +- code/game/objects/items/stacks/stack.dm | 98 ++--- code/game/objects/items/toys.dm | 12 +- code/game/objects/items/weapons/AI_modules.dm | 22 +- code/game/objects/items/weapons/RCD.dm | 10 +- code/game/objects/items/weapons/RSF.dm | 90 ++--- code/game/objects/items/weapons/cards_ids.dm | 6 +- .../game/objects/items/weapons/clown_items.dm | 4 +- code/game/objects/items/weapons/defib.dm | 2 +- .../objects/items/weapons/dna_injector.dm | 12 +- .../objects/items/weapons/dnascrambler.dm | 2 +- code/game/objects/items/weapons/explosives.dm | 12 +- .../objects/items/weapons/extinguisher.dm | 6 +- code/game/objects/items/weapons/fireworks.dm | 4 +- .../objects/items/weapons/gift_wrappaper.dm | 6 +- .../items/weapons/grenades/flashbang.dm | 4 +- .../objects/items/weapons/grenades/grenade.dm | 12 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- .../items/weapons/implants/implant_chem.dm | 2 +- .../weapons/implants/implant_death_alarm.dm | 4 +- .../items/weapons/implants/implant_misc.dm | 2 +- .../items/weapons/implants/implantchair.dm | 4 +- .../items/weapons/implants/implanter.dm | 2 +- .../items/weapons/implants/implantpad.dm | 6 +- code/game/objects/items/weapons/kitchen.dm | 4 +- code/game/objects/items/weapons/legcuffs.dm | 8 +- .../objects/items/weapons/melee/energy.dm | 2 +- code/game/objects/items/weapons/paint.dm | 2 +- code/game/objects/items/weapons/scissors.dm | 2 +- code/game/objects/items/weapons/scrolls.dm | 12 +- code/game/objects/items/weapons/shards.dm | 2 +- code/game/objects/items/weapons/soap.dm | 2 +- .../items/weapons/storage/artistic_toolbox.dm | 2 +- .../objects/items/weapons/storage/backpack.dm | 6 +- .../objects/items/weapons/storage/bags.dm | 18 +- .../objects/items/weapons/storage/belt.dm | 24 +- .../objects/items/weapons/storage/bible.dm | 10 +- .../objects/items/weapons/storage/boxes.dm | 2 +- .../objects/items/weapons/storage/fancy.dm | 2 +- .../objects/items/weapons/storage/firstaid.dm | 22 +- .../objects/items/weapons/storage/internal.dm | 14 +- .../objects/items/weapons/storage/lockbox.dm | 2 +- .../objects/items/weapons/storage/secure.dm | 46 +-- .../objects/items/weapons/storage/storage.dm | 82 ++-- .../objects/items/weapons/storage/toolbox.dm | 2 +- .../items/weapons/storage/uplink_kits.dm | 2 +- .../objects/items/weapons/swords_axes_etc.dm | 2 +- .../objects/items/weapons/table_rack_parts.dm | 2 +- .../objects/items/weapons/tanks/tank_types.dm | 4 +- .../game/objects/items/weapons/tanks/tanks.dm | 42 +-- .../objects/items/weapons/tanks/watertank.dm | 8 +- .../objects/items/weapons/teleportation.dm | 24 +- code/game/objects/items/weapons/tools.dm | 22 +- code/game/objects/items/weapons/twohanded.dm | 4 +- code/game/objects/items/weapons/wires.dm | 4 +- code/game/objects/objs.dm | 12 +- code/game/objects/random/random.dm | 2 +- code/game/objects/structures.dm | 14 +- code/game/objects/structures/barsign.dm | 4 +- code/game/objects/structures/coathanger.dm | 14 +- .../structures/crates_lockers/closets.dm | 10 +- .../crates_lockers/closets/fireaxe.dm | 10 +- .../closets/secure/guncabinet.dm | 16 +- .../crates_lockers/closets/secure/medical.dm | 6 +- .../crates_lockers/closets/secure/personal.dm | 6 +- .../closets/secure/secure_closets.dm | 2 +- .../crates_lockers/closets/statue.dm | 4 +- .../crates_lockers/closets/utility_closets.dm | 16 +- .../structures/crates_lockers/crates.dm | 6 +- .../structures/crates_lockers/walllocker.dm | 2 +- code/game/objects/structures/displaycase.dm | 20 +- code/game/objects/structures/door_assembly.dm | 14 +- code/game/objects/structures/engicart.dm | 2 +- code/game/objects/structures/extinguisher.dm | 4 +- code/game/objects/structures/false_walls.dm | 2 +- code/game/objects/structures/flora.dm | 4 +- code/game/objects/structures/foodcart.dm | 2 +- code/game/objects/structures/girders.dm | 18 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/inflatable.dm | 4 +- code/game/objects/structures/janicart.dm | 2 +- code/game/objects/structures/lamarr_cage.dm | 20 +- code/game/objects/structures/lattice.dm | 10 +- code/game/objects/structures/mineral_doors.dm | 4 +- code/game/objects/structures/mirror.dm | 2 +- code/game/objects/structures/misc.dm | 2 +- code/game/objects/structures/mop_bucket.dm | 10 +- code/game/objects/structures/morgue.dm | 132 +++---- code/game/objects/structures/musician.dm | 10 +- .../stool_bed_chair_nest/alien_nests.dm | 2 +- .../structures/stool_bed_chair_nest/stools.dm | 10 +- code/game/objects/structures/tables_racks.dm | 76 ++-- code/game/objects/structures/watercloset.dm | 14 +- .../objects/structures/windoor_assembly.dm | 4 +- code/game/objects/structures/window.dm | 18 +- code/game/response_team.dm | 12 +- code/game/skincmd.dm | 2 +- code/game/sound.dm | 36 +- code/game/turfs/simulated.dm | 10 +- code/game/turfs/simulated/floor.dm | 6 +- code/game/turfs/simulated/floor/plating.dm | 4 +- code/game/turfs/simulated/walls.dm | 14 +- code/game/turfs/simulated/walls_mineral.dm | 2 +- code/game/turfs/simulated/walls_reinforced.dm | 4 +- code/game/turfs/space/space.dm | 14 +- code/game/turfs/turf.dm | 4 +- code/game/verbs/ooc.dm | 2 +- code/game/verbs/suicide.dm | 30 +- code/game/verbs/who.dm | 4 +- code/modules/admin/IsBanned.dm | 18 +- code/modules/admin/NewBan.dm | 44 +-- code/modules/admin/admin.dm | 56 +-- code/modules/admin/admin_verbs.dm | 18 +- code/modules/admin/banappearance.dm | 8 +- code/modules/admin/banjob.dm | 12 +- code/modules/admin/create_mob.dm | 2 +- code/modules/admin/create_object.dm | 4 +- code/modules/admin/create_turf.dm | 2 +- code/modules/admin/newbanjob.dm | 44 +-- .../admin/permissionverbs/permissionedit.dm | 2 +- code/modules/admin/player_panel.dm | 14 +- code/modules/admin/secrets.dm | 6 +- code/modules/admin/sql_notes.dm | 2 +- code/modules/admin/stickyban.dm | 84 ++--- code/modules/admin/topic.dm | 78 ++-- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 4 +- .../admin/verbs/SDQL2/SDQL_2_parser.dm | 2 +- code/modules/admin/verbs/adminpm.dm | 2 +- code/modules/admin/verbs/adminsay.dm | 2 +- code/modules/admin/verbs/atmosdebug.dm | 18 +- code/modules/admin/verbs/deadsay.dm | 10 +- code/modules/admin/verbs/debug.dm | 40 +- code/modules/admin/verbs/diagnostics.dm | 12 +- code/modules/admin/verbs/freeze.dm | 2 +- code/modules/admin/verbs/honksquad.dm | 2 +- code/modules/admin/verbs/mapping.dm | 4 +- code/modules/admin/verbs/massmodvar.dm | 76 ++-- code/modules/admin/verbs/modifyvariables.dm | 6 +- code/modules/admin/verbs/one_click_antag.dm | 26 +- code/modules/admin/verbs/onlyone.dm | 4 +- code/modules/admin/verbs/onlyoneteam.dm | 4 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 28 +- code/modules/admin/verbs/striketeam.dm | 14 +- .../admin/verbs/striketeam_syndicate.dm | 18 +- code/modules/admin/verbs/vox_raiders.dm | 2 +- code/modules/alarm/alarm_handler.dm | 2 +- code/modules/arcade/arcade_base.dm | 2 +- code/modules/arcade/prize_counter.dm | 2 +- code/modules/assembly/bomb.dm | 4 +- code/modules/assembly/holder.dm | 8 +- code/modules/assembly/igniter.dm | 8 +- code/modules/assembly/proximity.dm | 4 +- code/modules/assembly/signaler.dm | 4 +- code/modules/atmos_automation/console.dm | 2 +- .../awaymissions/bluespaceartillery.dm | 2 +- code/modules/awaymissions/gateway.dm | 4 +- .../mission_code/stationCollision.dm | 2 +- .../awaymissions/mission_code/wildwest.dm | 2 +- code/modules/awaymissions/zlevel.dm | 14 +- code/modules/client/asset_cache.dm | 22 +- code/modules/client/client procs.dm | 8 +- code/modules/client/message.dm | 4 +- code/modules/client/preference/preferences.dm | 48 +-- .../client/preference/preferences_mysql.dm | 2 +- code/modules/clothing/clothing.dm | 30 +- code/modules/clothing/glasses/glasses.dm | 2 +- code/modules/clothing/head/misc_special.dm | 4 +- code/modules/clothing/shoes/colour.dm | 6 +- code/modules/clothing/spacesuits/alien.dm | 4 +- code/modules/clothing/spacesuits/breaches.dm | 6 +- code/modules/clothing/spacesuits/rig/rig.dm | 6 +- code/modules/clothing/suits/storage.dm | 6 +- .../clothing/under/accessories/accessory.dm | 8 +- .../clothing/under/accessories/holster.dm | 16 +- .../clothing/under/accessories/storage.dm | 12 +- code/modules/computer3/component.dm | 18 +- code/modules/computer3/computer.dm | 10 +- code/modules/computer3/computers/aifixer.dm | 24 +- code/modules/computer3/computers/arcade.dm | 22 +- .../computer3/computers/atmos_alert.dm | 2 +- code/modules/computer3/computers/camera.dm | 2 +- code/modules/computer3/computers/card.dm | 6 +- code/modules/computer3/computers/cloning.dm | 70 ++-- .../computer3/computers/communications.dm | 22 +- code/modules/computer3/computers/law.dm | 6 +- code/modules/computer3/computers/medical.dm | 178 ++++----- code/modules/computer3/computers/message.dm | 38 +- .../computer3/computers/prisonshuttle.dm | 30 +- code/modules/computer3/computers/robot.dm | 40 +- .../computer3/computers/scanconsole.dm | 338 ++++++++--------- code/modules/computer3/computers/security.dm | 166 ++++---- code/modules/computer3/computers/shuttle.dm | 12 +- .../computer3/computers/specops_shuttle.dm | 18 +- .../computer3/computers/station_alert.dm | 30 +- .../computers/syndicate_specops_shuttle.dm | 18 +- code/modules/computer3/lapvend.dm | 56 +-- code/modules/crafting/guncrafting.dm | 2 +- code/modules/customitems/item_spawning.dm | 4 +- code/modules/detective_work/scanner.dm | 14 +- code/modules/economy/ATM.dm | 2 +- code/modules/economy/Accounts.dm | 2 +- code/modules/economy/Accounts_DB.dm | 18 +- code/modules/economy/EFTPOS.dm | 8 +- code/modules/economy/utils.dm | 2 +- code/modules/events/anomaly_bluespace.dm | 2 +- code/modules/events/carp_migration.dm | 4 +- code/modules/events/dust.dm | 2 +- code/modules/events/event_manager.dm | 10 +- code/modules/events/holidays/Holidays.dm | 2 +- code/modules/events/immovable_rod.dm | 4 +- code/modules/events/ion_storm.dm | 2 +- code/modules/events/meaty_ores.dm | 2 +- code/modules/events/money_spam.dm | 8 +- code/modules/events/radiation_storm.dm | 2 +- code/modules/fish/fishtank.dm | 6 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/flufftext/TextFilters.dm | 2 +- code/modules/food/cooker.dm | 6 +- code/modules/food/customizables.dm | 32 +- code/modules/food/deep_fryer.dm | 4 +- code/modules/food/recipes_oven.dm | 4 +- .../garbage_collection/garbage_collector.dm | 10 +- code/modules/garbage_collection/gc_testing.dm | 8 +- code/modules/hydroponics/grown.dm | 6 +- code/modules/hydroponics/seed_machines.dm | 8 +- code/modules/hydroponics/seed_storage.dm | 64 ++-- .../hydroponics/spreading/spreading.dm | 4 +- code/modules/hydroponics/trays/tray.dm | 20 +- code/modules/hydroponics/trays/tray_apiary.dm | 2 +- .../modules/hydroponics/trays/tray_process.dm | 8 +- .../hydroponics/trays/tray_reagents.dm | 2 +- code/modules/hydroponics/trays/tray_tools.dm | 2 +- code/modules/karma/karma.dm | 6 +- code/modules/library/computers/base.dm | 4 +- code/modules/library/computers/checkout.dm | 4 +- code/modules/library/lib_items.dm | 2 +- code/modules/media/jukebox.dm | 8 +- code/modules/media/mediamanager.dm | 6 +- code/modules/mining/abandonedcrates.dm | 4 +- code/modules/mining/coins.dm | 2 +- code/modules/mining/equipment_locker.dm | 12 +- code/modules/mining/laborcamp/laborstacker.dm | 2 +- code/modules/mining/machine_processing.dm | 172 ++++----- code/modules/mining/machine_stacking.dm | 2 +- code/modules/mining/machine_unloading.dm | 6 +- code/modules/mining/manufacturing.dm | 196 +++++----- code/modules/mining/mine_turfs.dm | 48 +-- code/modules/mining/mint.dm | 34 +- code/modules/mining/money_bag.dm | 44 +-- code/modules/mining/satchel_ore_boxdm.dm | 50 +-- code/modules/mob/dead/observer/login.dm | 2 +- code/modules/mob/dead/observer/logout.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 32 +- code/modules/mob/dead/observer/say.dm | 6 +- code/modules/mob/emote.dm | 14 +- code/modules/mob/hear_say.dm | 26 +- code/modules/mob/language.dm | 12 +- code/modules/mob/living/carbon/alien/alien.dm | 12 +- .../mob/living/carbon/alien/alien_defenses.dm | 12 +- .../carbon/alien/humanoid/alien_powers.dm | 4 +- .../carbon/alien/humanoid/caste/hunter.dm | 4 +- .../carbon/alien/humanoid/caste/sentinel.dm | 4 +- .../mob/living/carbon/alien/humanoid/emote.dm | 28 +- .../living/carbon/alien/humanoid/empress.dm | 4 +- .../living/carbon/alien/humanoid/humanoid.dm | 74 ++-- .../mob/living/carbon/alien/humanoid/life.dm | 16 +- .../mob/living/carbon/alien/humanoid/queen.dm | 4 +- .../carbon/alien/humanoid/update_icons.dm | 6 +- .../mob/living/carbon/alien/larva/emote.dm | 38 +- .../mob/living/carbon/alien/larva/larva.dm | 42 +-- .../mob/living/carbon/alien/larva/powers.dm | 6 +- .../living/carbon/alien/larva/update_icons.dm | 4 +- .../living/carbon/alien/special/facehugger.dm | 4 +- code/modules/mob/living/carbon/brain/brain.dm | 12 +- code/modules/mob/living/carbon/brain/emote.dm | 20 +- code/modules/mob/living/carbon/brain/life.dm | 4 +- .../mob/living/carbon/brain/posibrain.dm | 8 +- code/modules/mob/living/carbon/brain/say.dm | 8 +- code/modules/mob/living/carbon/carbon.dm | 62 +-- code/modules/mob/living/carbon/human/emote.dm | 356 +++++++++--------- .../mob/living/carbon/human/examine.dm | 26 +- code/modules/mob/living/carbon/human/human.dm | 166 ++++---- .../living/carbon/human/human_attackhand.dm | 6 +- .../mob/living/carbon/human/human_damage.dm | 6 +- .../mob/living/carbon/human/human_defense.dm | 18 +- .../mob/living/carbon/human/human_movement.dm | 4 +- .../mob/living/carbon/human/human_organs.dm | 22 +- .../carbon/human/interactive/functions.dm | 2 +- .../mob/living/carbon/human/inventory.dm | 8 +- code/modules/mob/living/carbon/human/life.dm | 48 +-- code/modules/mob/living/carbon/human/say.dm | 14 +- .../living/carbon/human/species/plasmaman.dm | 2 +- .../mob/living/carbon/human/species/shadow.dm | 2 +- .../living/carbon/human/species/species.dm | 2 +- .../living/carbon/human/species/station.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 6 +- code/modules/mob/living/carbon/life.dm | 2 +- code/modules/mob/living/carbon/shock.dm | 2 +- code/modules/mob/living/carbon/slime/emote.dm | 20 +- .../mob/living/carbon/slime/examine.dm | 6 +- code/modules/mob/living/carbon/slime/life.dm | 186 ++++----- code/modules/mob/living/carbon/slime/say.dm | 10 +- code/modules/mob/living/carbon/slime/slime.dm | 66 ++-- code/modules/mob/living/life.dm | 2 +- code/modules/mob/living/living.dm | 48 +-- code/modules/mob/living/living_defense.dm | 8 +- code/modules/mob/living/logout.dm | 2 +- code/modules/mob/living/say.dm | 30 +- code/modules/mob/living/silicon/ai/ai.dm | 100 ++--- code/modules/mob/living/silicon/ai/death.dm | 4 +- code/modules/mob/living/silicon/ai/examine.dm | 12 +- .../mob/living/silicon/ai/freelook/eye.dm | 4 +- code/modules/mob/living/silicon/ai/laws.dm | 2 +- code/modules/mob/living/silicon/ai/life.dm | 6 +- code/modules/mob/living/silicon/ai/logout.dm | 2 +- code/modules/mob/living/silicon/decoy/life.dm | 4 +- code/modules/mob/living/silicon/emote.dm | 32 +- code/modules/mob/living/silicon/laws.dm | 2 +- code/modules/mob/living/silicon/pai/death.dm | 2 +- code/modules/mob/living/silicon/pai/life.dm | 2 +- code/modules/mob/living/silicon/pai/pai.dm | 44 +-- .../mob/living/silicon/pai/personality.dm | 8 +- .../modules/mob/living/silicon/pai/recruit.dm | 2 +- .../mob/living/silicon/pai/software.dm | 2 +- .../living/silicon/pai/software_modules.dm | 14 +- .../mob/living/silicon/robot/drone/drone.dm | 4 +- .../silicon/robot/drone/drone_abilities.dm | 2 +- .../silicon/robot/drone/drone_console.dm | 14 +- .../living/silicon/robot/drone/drone_items.dm | 12 +- .../silicon/robot/drone/drone_manufacturer.dm | 8 +- .../living/silicon/robot/drone/drone_say.dm | 12 +- .../modules/mob/living/silicon/robot/emote.dm | 94 ++--- .../mob/living/silicon/robot/examine.dm | 14 +- .../mob/living/silicon/robot/inventory.dm | 2 +- code/modules/mob/living/silicon/robot/laws.dm | 12 +- code/modules/mob/living/silicon/robot/life.dm | 8 +- .../mob/living/silicon/robot/photos.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 102 ++--- .../mob/living/silicon/robot/robot_damage.dm | 2 +- .../mob/living/silicon/robot/robot_items.dm | 8 +- .../mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/mob/living/silicon/say.dm | 20 +- code/modules/mob/living/silicon/silicon.dm | 26 +- .../mob/living/simple_animal/bot/bot.dm | 4 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/bot/emote.dm | 32 +- .../mob/living/simple_animal/bot/mulebot.dm | 4 +- .../mob/living/simple_animal/bot/secbot.dm | 2 +- .../mob/living/simple_animal/constructs.dm | 10 +- .../living/simple_animal/friendly/corgi.dm | 28 +- .../simple_animal/friendly/corgi_powers.dm | 2 +- .../mob/living/simple_animal/friendly/crab.dm | 6 +- .../living/simple_animal/friendly/diona.dm | 2 +- .../living/simple_animal/friendly/slime.dm | 10 +- .../simple_animal/friendly/spiderbot.dm | 16 +- .../living/simple_animal/hostile/syndicate.dm | 2 +- .../living/simple_animal/posessed_object.dm | 2 +- .../mob/living/simple_animal/powers.dm | 6 +- .../modules/mob/living/simple_animal/shade.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 32 +- .../mob/living/simple_animal/tribbles.dm | 22 +- code/modules/mob/living/simple_animal/vox.dm | 12 +- code/modules/mob/logout.dm | 2 +- code/modules/mob/mob.dm | 80 ++-- code/modules/mob/mob_defines.dm | 2 +- code/modules/mob/mob_grab.dm | 4 +- code/modules/mob/mob_helpers.dm | 28 +- code/modules/mob/mob_movement.dm | 36 +- code/modules/mob/new_player/new_player.dm | 18 +- code/modules/mob/new_player/poll.dm | 6 +- .../mob/new_player/preferences_setup.dm | 2 +- code/modules/mob/say.dm | 12 +- code/modules/mob/spirit/cultnet.dm | 4 +- code/modules/mob/spirit/mask/mask.dm | 28 +- code/modules/mob/spirit/movement.dm | 6 +- code/modules/mob/spirit/spirit.dm | 8 +- code/modules/mob/spirit/viewpoint.dm | 30 +- code/modules/mob/transform_procs.dm | 26 +- code/modules/mob/typing_indicator.dm | 4 +- code/modules/nano/interaction/base.dm | 6 +- code/modules/nano/interaction/default.dm | 8 +- code/modules/nano/modules/alarm_monitor.dm | 2 +- code/modules/nano/modules/crew_monitor.dm | 2 +- code/modules/nano/modules/human_appearance.dm | 2 +- code/modules/nano/modules/law_manager.dm | 4 +- code/modules/nano/modules/power_monitor.dm | 4 +- code/modules/nano/nanoexternal.dm | 4 +- code/modules/nano/nanomanager.dm | 52 +-- code/modules/nano/nanomapgen.dm | 16 +- code/modules/nano/nanoui.dm | 38 +- code/modules/ninja/martial_art.dm | 2 +- code/modules/ninja/suit/SpiderOS.dm | 10 +- code/modules/ninja/suit/suit_attackby.dm | 2 +- code/modules/paperwork/carbonpaper.dm | 4 +- code/modules/paperwork/faxmachine.dm | 30 +- code/modules/paperwork/paper.dm | 22 +- code/modules/paperwork/paper_bundle.dm | 6 +- code/modules/paperwork/paperbin.dm | 4 +- code/modules/paperwork/photocopier.dm | 20 +- code/modules/paperwork/photography.dm | 6 +- code/modules/pda/PDA.dm | 36 +- code/modules/pda/ai.dm | 6 +- code/modules/pda/cart_apps.dm | 8 +- code/modules/pda/chatroom.dm | 8 +- code/modules/pda/core_apps.dm | 2 +- code/modules/pda/messenger.dm | 14 +- code/modules/pda/messenger_plugins.dm | 2 +- code/modules/pda/pdas.dm | 2 +- code/modules/pda/radio.dm | 4 +- code/modules/pda/utilities.dm | 18 +- code/modules/pooling/pool.dm | 2 +- code/modules/power/apc.dm | 176 ++++----- code/modules/power/cable.dm | 30 +- code/modules/power/cell.dm | 46 +-- code/modules/power/engine.dm | 4 +- code/modules/power/generator.dm | 10 +- code/modules/power/generator_type2.dm | 2 +- code/modules/power/gravitygenerator.dm | 6 +- code/modules/power/lighting.dm | 34 +- code/modules/power/port_gen.dm | 42 +-- code/modules/power/power.dm | 20 +- code/modules/power/powernet.dm | 16 +- code/modules/power/singularity/collector.dm | 4 +- code/modules/power/singularity/emitter.dm | 12 +- .../power/singularity/field_generator.dm | 26 +- code/modules/power/singularity/investigate.dm | 2 +- .../particle_accelerator/particle.dm | 2 +- .../particle_accelerator.dm | 16 +- .../particle_accelerator/particle_control.dm | 2 +- code/modules/power/singularity/singularity.dm | 4 +- code/modules/power/smes.dm | 28 +- code/modules/power/solar.dm | 16 +- code/modules/power/supermatter/sm_crystals.dm | 4 +- code/modules/power/supermatter/supermatter.dm | 2 +- code/modules/power/tesla/energy_ball.dm | 10 +- code/modules/power/turbine.dm | 2 +- .../mapGeneratorModules/helpers.dm | 2 +- code/modules/projectiles/ammunition.dm | 16 +- .../projectiles/ammunition/ammo_casings.dm | 8 +- .../projectiles/ammunition/magazines.dm | 2 +- code/modules/projectiles/firing.dm | 8 +- code/modules/projectiles/guns/dartgun.dm | 18 +- code/modules/projectiles/guns/energy.dm | 12 +- .../projectiles/guns/energy/special.dm | 10 +- .../projectiles/guns/energy/telegun.dm | 2 +- code/modules/projectiles/guns/magic.dm | 2 +- code/modules/projectiles/guns/projectile.dm | 2 +- .../projectiles/guns/projectile/revolver.dm | 18 +- .../projectiles/guns/projectile/shotgun.dm | 4 +- code/modules/projectiles/projectile/magic.dm | 2 +- .../modules/projectiles/projectile/special.dm | 4 +- code/modules/reagents/Chemistry-Holder.dm | 40 +- code/modules/reagents/Chemistry-Machinery.dm | 168 ++++----- code/modules/reagents/newchem/chem_heater.dm | 2 +- code/modules/reagents/newchem/drugs.dm | 2 +- code/modules/reagents/newchem/medicine.dm | 4 +- .../modules/reagents/newchem/newchem_procs.dm | 2 +- code/modules/reagents/newchem/pyro.dm | 10 +- .../reagents/drink/reagents_alcohol.dm | 8 +- .../oldchem/reagents/drink/reagents_drink.dm | 2 +- .../reagents/drink/reagents_drink_base.dm | 10 +- .../oldchem/reagents/reagents_admin.dm | 2 +- .../oldchem/reagents/reagents_drugs.dm | 8 +- .../oldchem/reagents/reagents_food.dm | 14 +- .../reagents/oldchem/reagents/reagents_med.dm | 2 +- .../oldchem/reagents/reagents_toxin.dm | 18 +- .../oldchem/reagents/reagents_water.dm | 8 +- code/modules/reagents/pandemic.dm | 8 +- code/modules/reagents/reagent_containers.dm | 6 +- .../reagents/reagent_containers/borghydro.dm | 4 +- .../reagents/reagent_containers/dropper.dm | 10 +- .../reagents/reagent_containers/food/cans.dm | 8 +- .../reagent_containers/food/condiment.dm | 2 +- .../reagent_containers/food/drinks.dm | 8 +- .../food/drinks/drinkingglass.dm | 4 +- .../reagent_containers/food/drinks/jar.dm | 2 +- .../reagent_containers/food/snacks.dm | 10 +- .../reagent_containers/glass/bottle.dm | 2 +- .../reagent_containers/glass_containers.dm | 14 +- .../reagents/reagent_containers/spray.dm | 6 +- .../reagents/reagent_containers/syringes.dm | 24 +- code/modules/reagents/reagent_dispenser.dm | 16 +- code/modules/recycling/disposal.dm | 32 +- code/modules/recycling/sortingmachinery.dm | 6 +- code/modules/research/circuitprinter.dm | 22 +- code/modules/research/destructive_analyzer.dm | 14 +- code/modules/research/experimentor.dm | 14 +- code/modules/research/message_server.dm | 10 +- code/modules/research/protolathe.dm | 16 +- code/modules/research/rdconsole.dm | 26 +- code/modules/research/rdmachines.dm | 6 +- code/modules/research/server.dm | 10 +- .../xenoarchaeology/artifact/artifact.dm | 8 +- .../artifact/artifact_unknown.dm | 20 +- .../effects/unknown_effect_badfeeling.dm | 6 +- .../effects/unknown_effect_cellcharge.dm | 22 +- .../effects/unknown_effect_celldrain.dm | 22 +- .../effects/unknown_effect_goodfeeling.dm | 6 +- .../artifact/effects/unknown_effect_heal.dm | 4 +- .../artifact/effects/unknown_effect_hurt.dm | 4 +- .../effects/unknown_effect_radiate.dm | 4 +- .../effects/unknown_effect_roboheal.dm | 6 +- .../effects/unknown_effect_robohurt.dm | 6 +- .../artifact/effects/unknown_effect_sleepy.dm | 6 +- .../artifact/effects/unknown_effect_stun.dm | 4 +- .../xenoarchaeology/finds/finds_misc.dm | 4 +- .../finds/finds_talkingitem.dm | 4 +- .../xenoarchaeology/genetics/reconstitutor.dm | 2 +- .../machinery/artifact_harvester.dm | 8 +- .../xenoarchaeology/machinery/coolant.dm | 4 +- .../machinery/geosample_scanner.dm | 6 +- .../tools/ano_device_battery.dm | 2 +- .../tools/suspension_generator.dm | 14 +- .../xenoarchaeology/tools/tools_locater.dm | 2 +- .../xenoarchaeology/tools/tools_pickaxe.dm | 2 +- .../research/xenobiology/xenobiology.dm | 6 +- .../security_levels/keycard authentication.dm | 6 +- code/modules/shuttle/emergency.dm | 6 +- code/modules/shuttle/shuttle.dm | 16 +- code/modules/shuttle/supply.dm | 30 +- code/modules/spacepods/pod_fabricator.dm | 4 +- code/modules/spacepods/spacepod.dm | 16 +- code/modules/surgery/bones.dm | 4 +- code/modules/surgery/encased.dm | 32 +- code/modules/surgery/face.dm | 6 +- code/modules/surgery/generic.dm | 30 +- code/modules/surgery/implant.dm | 22 +- code/modules/surgery/limb_reattach.dm | 8 +- code/modules/surgery/organs/blood.dm | 16 +- code/modules/surgery/organs/organ.dm | 38 +- code/modules/surgery/organs/organ_external.dm | 84 ++--- code/modules/surgery/organs/organ_icon.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 10 +- .../surgery/organs/subtypes/standard.dm | 8 +- code/modules/surgery/organs/wound.dm | 48 +-- code/modules/surgery/organs_internal.dm | 34 +- code/modules/surgery/other.dm | 16 +- code/modules/surgery/robotics.dm | 28 +- code/modules/surgery/surgery.dm | 14 +- code/modules/telesci/telesci_computer.dm | 10 +- code/modules/tooltip/tooltip.dm | 14 +- code/modules/tooltip/tooltip.html | 28 +- code/world.dm | 38 +- 870 files changed, 7679 insertions(+), 7679 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index adb9d60ab1f..4db227ab6f6 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -156,7 +156,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if(can_unwrench && istype(W, /obj/item/weapon/wrench)) var/turf/T = get_turf(src) - if (level == 1 && isturf(T) && T.intact) + if(level == 1 && isturf(T) && T.intact) to_chat(user, "You must remove the plating first.") return 1 var/datum/gas_mixture/int_air = return_air() @@ -168,11 +168,11 @@ Pipelines + Other Objects -> Pipe network playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You begin to unfasten \the [src]...") - if (internal_pressure > 2*ONE_ATMOSPHERE) + if(internal_pressure > 2*ONE_ATMOSPHERE) to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") unsafe_wrenching = TRUE //Oh dear oh dear - if (do_after(user, 40, target = src) && isnull(gcDestroyed)) + if(do_after(user, 40, target = src) && isnull(gcDestroyed)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src].", \ @@ -293,7 +293,7 @@ Pipelines + Other Objects -> Pipe network add_underlay_adapter(T, , node_dir, "") add_underlay_adapter(T, node, node_dir, "-supply") add_underlay_adapter(T, , node_dir, "-scrubbers") - else if (node.icon_connect_type == "-scrubbers") + else if(node.icon_connect_type == "-scrubbers") add_underlay_adapter(T, , node_dir, "") add_underlay_adapter(T, , node_dir, "-supply") add_underlay_adapter(T, node, node_dir, "-scrubbers") diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index f24623f9422..8951977d4db 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -49,7 +49,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c connected_to = c node1 = target @@ -58,7 +58,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c connected_to = c node2 = target diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index aff64bd8a10..06fe22de2ce 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -35,7 +35,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/New() ..() - if (!id_tag) + if(!id_tag) assign_uid() id_tag = num2text(uid) icon = null @@ -93,11 +93,11 @@ if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) return else - if (node1) + if(node1) add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type) else add_underlay(T, node1, turn(dir, -180)) - if (node2) + if(node2) add_underlay(T, node2, dir, node2.icon_connect_type) else add_underlay(T, node2, dir) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 3e643565ac6..ae27f829621 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -155,9 +155,9 @@ return /obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) - if (!istype(W, /obj/item/weapon/wrench)) + if(!istype(W, /obj/item/weapon/wrench)) return ..() - if (on) + if(on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 return ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index a8d8c453706..6157c87115c 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -182,9 +182,9 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) - if (!istype(W, /obj/item/weapon/wrench)) + if(!istype(W, /obj/item/weapon/wrench)) return ..() - if (!(stat & NOPOWER) && on) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 return ..() \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index 1c0f625e036..b9ab8a4272d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -52,7 +52,7 @@ add_fingerprint(usr) update_icon(1) sleep(10) - if (open) + if(open) close() return open() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 059cb25f080..875f09f6bda 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -173,9 +173,9 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/volume_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) - if (!istype(W, /obj/item/weapon/wrench)) + if(!istype(W, /obj/item/weapon/wrench)) return ..() - if (!(stat & NOPOWER) && on) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 return ..() \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index 8570f92462a..94efade9b1a 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -117,7 +117,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330) ui.set_initial_data(data) ui.open() diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index 27bf6437c9e..c64703773d3 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -141,7 +141,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330) ui.set_initial_data(data) ui.open() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 77fd2328b08..beae30e55db 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -103,7 +103,7 @@ for(var/datum/omni_port/P in ports) int_pressure += P.air.return_pressure() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + if((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) to_chat(user, "You cannot unwrench [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 698753fa1be..612f51df80a 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -191,7 +191,7 @@ Filter types: onclose(user, "atmo_filter") return - if (src.temp) + if(src.temp) dat = text("[]

    Clear Screen", src.temp, src) //else // src.on != src.on @@ -207,7 +207,7 @@ Filter types: src.add_fingerprint(usr) if(href_list["filterset"]) src.filter_type = text2num(href_list["filterset"]) - if (href_list["temp"]) + if(href_list["temp"]) src.temp = null if(href_list["set_press"]) var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num @@ -218,7 +218,7 @@ Filter types: src.updateUsrDialog() /* for(var/mob/M in viewers(1, src)) - if ((M.client && M.machine == src)) + if((M.client && M.machine == src)) src.attack_hand(M) */ return diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index 2f6845a16c6..cdf11742ad8 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -172,7 +172,7 @@ interact(user) return 1 if(istype(W, /obj/item/weapon/wrench)) - if (!(stat & NOPOWER) && on) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn if off first.") return 1 return ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm index 94384f8ca3d..dc7da589017 100644 --- a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm +++ b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm @@ -28,10 +28,10 @@ var/transfer_moles = 0.25 * environment.total_moles() var/datum/gas_mixture/external_removed = environment.remove(transfer_moles) - if (!external_removed) + if(!external_removed) return radiate() - if (external_removed.total_moles() < 10) + if(external_removed.total_moles() < 10) return radiate() //Get same info from connected gas @@ -39,7 +39,7 @@ var/internal_transfer_moles = 0.25 * air_contents.total_moles() var/datum/gas_mixture/internal_removed = air_contents.remove(internal_transfer_moles) - if (!internal_removed) + if(!internal_removed) environment.merge(external_removed) return 1 @@ -63,7 +63,7 @@ var/internal_transfer_moles = 0.25 * air_contents.total_moles() var/datum/gas_mixture/internal_removed = air_contents.remove(internal_transfer_moles) - if (!internal_removed) + if(!internal_removed) return 1 var/combined_heat_capacity = internal_removed.heat_capacity() + RADIATION_CAPACITY diff --git a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm index 3c993e26b0b..e61a62736c3 100644 --- a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm @@ -27,7 +27,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c src.connected_to = c node = target diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 6fe6c646cf5..0a856fb047a 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -63,7 +63,7 @@ icon = null initial_loc = get_area(loc) area_uid = initial_loc.uid - if (!id_tag) + if(!id_tag) assign_uid() id_tag = num2text(uid) ..() @@ -121,7 +121,7 @@ /obj/machinery/atmospherics/unary/vent_pump/process() if(!..() || (stat & (NOPOWER|BROKEN))) return 0 - if (!node) + if(!node) on = 0 //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0 if(!on) @@ -164,7 +164,7 @@ var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - if (isnull(removed)) //in space + if(isnull(removed)) //in space return air_contents.merge(removed) @@ -252,7 +252,7 @@ on = !on if(signal.data["checks"] != null) - if (signal.data["checks"] == "default") + if(signal.data["checks"] == "default") pressure_checks = pressure_checks_default else pressure_checks = text2num(signal.data["checks"]) @@ -264,7 +264,7 @@ pump_direction = text2num(signal.data["direction"]) if(signal.data["set_internal_pressure"] != null) - if (signal.data["set_internal_pressure"] == "default") + if(signal.data["set_internal_pressure"] == "default") internal_pressure_bound = internal_pressure_bound_default else internal_pressure_bound = between( @@ -274,7 +274,7 @@ ) if(signal.data["set_external_pressure"] != null) - if (signal.data["set_external_pressure"] == "default") + if(signal.data["set_external_pressure"] == "default") external_pressure_bound = external_pressure_bound_default else external_pressure_bound = between( @@ -320,7 +320,7 @@ /obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0,user)) + if(WT.remove_fuel(0,user)) to_chat(user, "Now welding the vent.") if(do_after(user, 20, target = src)) if(!src || !WT.isOn()) return @@ -343,12 +343,12 @@ if(!welded) if(open) to_chat(user, " Now closing the vent.") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) open = 0 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") else to_chat(user, " Now opening the vent.") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) open = 1 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") return @@ -365,8 +365,8 @@ if(istype(W, /obj/item/device/multitool)) update_multitool_menu(user) return 1 - if (istype(W, /obj/item/weapon/wrench)) - if (!(stat & NOPOWER) && on) + if(istype(W, /obj/item/weapon/wrench)) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index d0b0c9eb693..a7829d9fc1c 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -44,7 +44,7 @@ icon = null initial_loc = get_area(loc) area_uid = initial_loc.uid - if (!id_tag) + if(!id_tag) assign_uid() id_tag = num2text(uid) ..() @@ -63,26 +63,26 @@ /obj/machinery/atmospherics/unary/vent_scrubber/auto_use_power() if(!powered(power_channel)) return 0 - if (!on || welded) + if(!on || welded) return 0 if(stat & (NOPOWER|BROKEN)) return 0 var/amount = idle_power_usage - if (scrubbing) - if (scrub_CO2) + if(scrubbing) + if(scrub_CO2) amount += idle_power_usage - if (scrub_Toxins) + if(scrub_Toxins) amount += idle_power_usage - if (scrub_N2) + if(scrub_N2) amount += idle_power_usage - if (scrub_N2O) + if(scrub_N2O) amount += idle_power_usage else amount = active_power_usage - if (widenet) + if(widenet) amount += amount*(adjacent_turfs.len*(adjacent_turfs.len/2)) use_power(amount, power_channel) return 1 @@ -178,13 +178,13 @@ if(!..()) return 0 - if (widenet) + if(widenet) check_turfs() if(stat & (NOPOWER|BROKEN)) return - if (!node) + if(!node) on = 0 if(welded) @@ -194,8 +194,8 @@ return 0 scrub(loc) - if (widenet) - for (var/turf/simulated/tile in adjacent_turfs) + if(widenet) + for(var/turf/simulated/tile in adjacent_turfs) scrub(tile) //we populate a list of turfs with nonatmos-blocked cardinal turfs AND @@ -203,11 +203,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/proc/check_turfs() adjacent_turfs.Cut() var/turf/T = loc - if (istype(T)) + if(istype(T)) adjacent_turfs = T.GetAtmosAdjacentTurfs(alldir=1) /obj/machinery/atmospherics/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) - if (!tile || !istype(tile)) + if(!tile || !istype(tile)) return 0 var/datum/gas_mixture/environment = tile.return_air() @@ -218,7 +218,7 @@ //Take a gas sample var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - if (isnull(removed)) //in space + if(isnull(removed)) //in space return //Filter it @@ -253,7 +253,7 @@ tile.air_update_turf() else //Just siphoning all air - if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) + if(air_contents.return_pressure()>=50*ONE_ATMOSPHERE) return var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) @@ -372,7 +372,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0,user)) + if(WT.remove_fuel(0,user)) to_chat(user, "Now welding the scrubber.") if(do_after(user, 20, target = src)) if(!src || !WT.isOn()) return @@ -394,8 +394,8 @@ if(istype(W, /obj/item/device/multitool)) update_multitool_menu(user) return 1 - if (istype(W, /obj/item/weapon/wrench)) - if (!(stat & NOPOWER) && on) + if(istype(W, /obj/item/weapon/wrench)) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index f20d71c2828..0504062eb09 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -67,7 +67,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c src.connected_to = c node = target diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index 8ba5db9fbd5..4b37036f96a 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -124,8 +124,8 @@ if(!node1 && !node2 && !node3) var/turf/T = get_turf(src) new /obj/item/pipe(loc, make_from=src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) new /obj/item/pipe_meter(T) qdel(meter) qdel(src) diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 5975ffce26b..b6cd15bc211 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -97,8 +97,8 @@ if(!node1 && !node2 && !node3 && !node4) var/turf/T = get_turf(src) new /obj/item/pipe(loc, make_from=src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) new /obj/item/pipe_meter(T) qdel(meter) qdel(src) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index fbd5f85b6c5..5db391d4dd0 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -144,8 +144,8 @@ if(!node1 && !node2) var/turf/T = get_turf(src) new /obj/item/pipe(loc, make_from=src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) new /obj/item/pipe_meter(T) qdel(meter) qdel(src) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm index 5cde784c8ce..a771bdd6234 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm @@ -96,17 +96,17 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/New() .. () - switch (dir) - if (SOUTH) + switch(dir) + if(SOUTH) initialize_directions = NORTH initialize_directions_he = SOUTH - if (NORTH) + if(NORTH) initialize_directions = SOUTH initialize_directions_he = NORTH - if (EAST) + if(EAST) initialize_directions = WEST initialize_directions_he = EAST - if (WEST) + if(WEST) initialize_directions = EAST initialize_directions_he = WEST diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm index 7cf983e0e32..db62f8e51fe 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm @@ -37,14 +37,14 @@ overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") underlays.Cut() - if (node1) + if(node1) universal_underlays(node1) if(node2) universal_underlays(node2) else var/node2_dir = turn(get_dir(src,node1),-180) universal_underlays(,node2_dir) - else if (node2) + else if(node2) universal_underlays(node2) var/node1_dir = turn(get_dir(src,node2),-180) universal_underlays(,node1_dir) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm index a93351b29c7..1fcb45e7959 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm @@ -48,14 +48,14 @@ overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") underlays.Cut() - if (node1) + if(node1) universal_underlays(node1) if(node2) universal_underlays(node2) else var/node1_dir = get_dir(node1,src) universal_underlays(,node1_dir) - else if (node2) + else if(node2) universal_underlays(node2) else universal_underlays(,dir) diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index afbeb0a0e45..14f8ab20998 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -165,7 +165,7 @@ var/turf/simulated/T = loc if(T.to_be_destroyed) var/chance_of_deletion - if (T.heat_capacity) //beware of division by zero + if(T.heat_capacity) //beware of division by zero chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0 else chance_of_deletion = 100 diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index 2584192e7b4..423356c4e8e 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -83,35 +83,35 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0) //alldir includes adjacent diagonal tiles that can share // air with both of the related adjacent cardinal tiles /turf/proc/GetAtmosAdjacentTurfs(alldir = 0) - if (!istype(src, /turf/simulated)) + if(!istype(src, /turf/simulated)) return list() var/adjacent_turfs = list() var/turf/simulated/curloc = src - for (var/direction in cardinal) + for(var/direction in cardinal) if(!(curloc.atmos_adjacent_turfs & direction)) continue var/turf/simulated/S = get_step(curloc, direction) - if (istype(S)) + if(istype(S)) adjacent_turfs += S - if (!alldir) + if(!alldir) return adjacent_turfs - for (var/direction in diagonals) + for(var/direction in diagonals) var/matchingDirections = 0 var/turf/simulated/S = get_step(curloc, direction) - for (var/checkDirection in cardinal) + for(var/checkDirection in cardinal) if(!(S.atmos_adjacent_turfs & checkDirection)) continue var/turf/simulated/checkTurf = get_step(S, checkDirection) - if (checkTurf in adjacent_turfs) + if(checkTurf in adjacent_turfs) matchingDirections++ - if (matchingDirections >= 2) + if(matchingDirections >= 2) adjacent_turfs += S break diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 3aeacb942a7..b292e7664b2 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -246,14 +246,14 @@ overlays -= icemaster var/new_overlay_type = tile_graphic() - if (new_overlay_type == atmos_overlay_type) + if(new_overlay_type == atmos_overlay_type) return var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) - if (atmos_overlay) + if(atmos_overlay) overlays -= atmos_overlay atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) - if (atmos_overlay) + if(atmos_overlay) overlays += atmos_overlay atmos_overlay_type = new_overlay_type diff --git a/code/__DEFINES/tick.dm b/code/__DEFINES/tick.dm index 0469a81a392..71a63af6289 100644 --- a/code/__DEFINES/tick.dm +++ b/code/__DEFINES/tick.dm @@ -2,4 +2,4 @@ #define TICK_LIMIT_TO_RUN 85 #define TICK_CHECK ( world.tick_usage > TICK_LIMIT_RUNNING ? stoplag() : 0 ) -#define CHECK_TICK if (world.tick_usage > TICK_LIMIT_RUNNING) stoplag() \ No newline at end of file +#define CHECK_TICK if(world.tick_usage > TICK_LIMIT_RUNNING) stoplag() \ No newline at end of file diff --git a/code/__HELPERS/AnimationLibrary.dm b/code/__HELPERS/AnimationLibrary.dm index 65225d37363..fcabe2e0a78 100644 --- a/code/__HELPERS/AnimationLibrary.dm +++ b/code/__HELPERS/AnimationLibrary.dm @@ -64,7 +64,7 @@ return var/matrix/M = matrix() var/do_loops = 15 - while (do_loops > 0) + while(do_loops > 0) do_loops-- animate(A, transform = M, pixel_z = A.pixel_z + 12, alpha = A.alpha - 17, time = 1, loop = 1, easing = LINEAR_EASING) M.Scale(1.2,1.2) diff --git a/code/__HELPERS/experimental.dm b/code/__HELPERS/experimental.dm index 27daccfc58c..533f67b68d9 100644 --- a/code/__HELPERS/experimental.dm +++ b/code/__HELPERS/experimental.dm @@ -16,18 +16,18 @@ * -2, parameter A is not a string */ /proc/strpos(const/A, const/B) - if (istext(A) == 0 || length(A) < 1) + if(istext(A) == 0 || length(A) < 1) return -2 - if (istext(B) == 0 || length(B) > 1) + if(istext(B) == 0 || length(B) > 1) return -1 var/i = findtext(A, B) - if (0 == i) + if(0 == i) return 0 - while (i) + while(i) . = i i = findtext(A, B, i + 1) @@ -35,8 +35,8 @@ var/prototype = Object.type Object = null - for (var/type in params2list(types)) - if (ispath(prototype, text2path(type))) + for(var/type in params2list(types)) + if(ispath(prototype, text2path(type))) return 1 return 0 @@ -45,7 +45,7 @@ /obj/machinery/proc/getArea() var/area/A = loc.loc - if (A != myArea) + if(A != myArea) myArea = A . = myArea \ No newline at end of file diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 47cee347876..ef909b93c85 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -10,7 +10,7 @@ /proc/get_area_master(const/O) var/area/A = get_area(O) - if (isarea(A)) + if(isarea(A)) return A /proc/get_area(atom/A) @@ -440,7 +440,7 @@ proc/pollCandidates(var/Question, var/be_special_type, var/antag_age_check = 0, var/roletext = be_special_type ? get_roletext(be_special_type) : null var/list/mob/dead/observer/candidates = list() var/time_passed = world.time - if (!Question) + if(!Question) Question = "Would you like to be a special role?" for(var/mob/dead/observer/G in player_list) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 36bb824e642..8a44c1b7cab 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -29,7 +29,7 @@ init_datum_subtypes(/datum/nations, all_nations, null, "default_name") init_datum_subtypes(/datum/language, all_languages, null, "name") - for (var/language_name in all_languages) + for(var/language_name in all_languages) var/datum/language/L = all_languages[language_name] if(!(L.flags & NONGLOBAL)) language_keys[":[lowertext(L.key)]"] = L @@ -52,7 +52,7 @@ /* // Uncomment to debug chemical reaction list. /client/verb/debug_chemical_list() - for (var/reaction in chemical_reactions_list) + for(var/reaction in chemical_reactions_list) . += "chemical_reactions_list\[\"[reaction]\"\] = \"[chemical_reactions_list[reaction]]\"\n" if(islist(chemical_reactions_list[reaction])) var/list/L = chemical_reactions_list[reaction] diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 6376ebb4215..5b51ad21187 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -747,7 +747,7 @@ The _flatIcons list is a cache for generated icon files. add = icon(I:icon, I:icon_state, I:dir) // This checks for a silent failure mode of the icon routine. If the requested dir // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. - if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) + if(I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) // Check every pixel for blank (computationally expensive, but the process is limited // by the amount of film on the station, only happens when we hit something that's // turned, and bails at the very first pixel it sees. @@ -760,7 +760,7 @@ The _flatIcons list is a cache for generated icon files. if(!blankpixel) break // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) - if (blankpixel) + if(blankpixel) // Pull the default direction. add = icon(I:icon, I:icon_state) else // 'I' is an appearance object. @@ -830,8 +830,8 @@ The _flatIcons list is a cache for generated icon files. return composite proc/adjust_brightness(var/color, var/value) - if (!color) return "#FFFFFF" - if (!value) return color + if(!color) return "#FFFFFF" + if(!value) return color var/list/RGB = ReadRGB(color) RGB[1] = Clamp(RGB[1]+value,0,255) @@ -844,7 +844,7 @@ proc/sort_atoms_by_layer(var/list/atoms) var/list/result = atoms.Copy() var/gap = result.len var/swapped = 1 - while (gap > 1 || swapped) + while(gap > 1 || swapped) swapped = 0 if(gap > 1) gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 948602def06..e749dab5fa8 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -12,17 +12,17 @@ //Returns a list in plain english as a string /proc/english_list(var/list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) var/total = input.len - if (!total) + if(!total) return "[nothing_text]" - else if (total == 1) + else if(total == 1) return "[input[1]]" - else if (total == 2) + else if(total == 2) return "[input[1]][and_text][input[2]]" else var/output = "" var/index = 1 - while (index < total) - if (index == total - 1) + while(index < total) + if(index == total - 1) comma_text = final_comma_text output += "[input[index]][comma_text]" @@ -107,22 +107,22 @@ /proc/pickweight(list/L) var/total = 0 var/item - for (item in L) - if (!L[item]) + for(item in L) + if(!L[item]) L[item] = 1 total += L[item] total = rand(1, total) - for (item in L) + for(item in L) total -=L [item] - if (total <= 0) + if(total <= 0) return item return null //Pick a random element from the list and remove it from the list. /proc/pick_n_take(list/listfrom) - if (listfrom.len > 0) + if(listfrom.len > 0) var/picked = pick(listfrom) listfrom -= picked return picked @@ -130,7 +130,7 @@ //Returns the top(last) element from the list and removes it from the list (typical stack function) /proc/pop(list/listfrom) - if (listfrom.len > 0) + if(listfrom.len > 0) var/picked = listfrom[listfrom.len] listfrom.len-- return picked @@ -459,22 +459,22 @@ proc/dd_sortedObjectList(list/incoming) var/list/list_bottom var/current_sort_object - for (current_sort_object in incoming) + for(current_sort_object in incoming) low_index = 1 high_index = sorted_list.len - while (low_index <= high_index) + while(low_index <= high_index) // Figure out the midpoint, rounding up for fractions. (BYOND rounds down, so add 1 if necessary.) midway_calc = (low_index + high_index) / 2 current_index = round(midway_calc) - if (midway_calc > current_index) + if(midway_calc > current_index) current_index++ current_item = sorted_list[current_index] current_item_value = current_item:dd_SortValue() current_sort_object_value = current_sort_object:dd_SortValue() - if (current_sort_object_value < current_item_value) + if(current_sort_object_value < current_item_value) high_index = current_index - 1 - else if (current_sort_object_value > current_item_value) + else if(current_sort_object_value > current_item_value) low_index = current_index + 1 else // current_sort_object == current_item @@ -485,7 +485,7 @@ proc/dd_sortedObjectList(list/incoming) insert_index = low_index // Special case adding to end of list. - if (insert_index > sorted_list.len) + if(insert_index > sorted_list.len) sorted_list += current_sort_object continue @@ -515,28 +515,28 @@ proc/dd_sortedObjectList(list/incoming) var/sort_result var/current_sort_text - for (current_sort_text in incoming) + for(current_sort_text in incoming) low_index = 1 high_index = sorted_text.len - while (low_index <= high_index) + while(low_index <= high_index) // Figure out the midpoint, rounding up for fractions. (BYOND rounds down, so add 1 if necessary.) midway_calc = (low_index + high_index) / 2 current_index = round(midway_calc) - if (midway_calc > current_index) + if(midway_calc > current_index) current_index++ current_item = sorted_text[current_index] - if (case_sensitive) + if(case_sensitive) sort_result = sorttextEx(current_sort_text, current_item) else sort_result = sorttext(current_sort_text, current_item) switch(sort_result) - if (1) + if(1) high_index = current_index - 1 // current_sort_text < current_item - if (-1) + if(-1) low_index = current_index + 1 // current_sort_text > current_item - if (0) + if(0) low_index = current_index // current_sort_text == current_item break @@ -544,7 +544,7 @@ proc/dd_sortedObjectList(list/incoming) insert_index = low_index // Special case adding to end of list. - if (insert_index > sorted_text.len) + if(insert_index > sorted_text.len) sorted_text += current_sort_text continue diff --git a/code/__HELPERS/logging.dm b/code/__HELPERS/logging.dm index bf3a5b3ffc9..b2d81f9060d 100644 --- a/code/__HELPERS/logging.dm +++ b/code/__HELPERS/logging.dm @@ -21,12 +21,12 @@ /proc/log_admin(text) admin_log.Add(text) - if (config.log_admin) + if(config.log_admin) diary << "\[[time_stamp()]]ADMIN: [text]" /proc/log_debug(text) - if (config.log_debug) + if(config.log_debug) diary << "\[[time_stamp()]]DEBUG: [text]" for(var/client/C in admins) @@ -35,47 +35,47 @@ /proc/log_game(text) - if (config.log_game) + if(config.log_game) diary << "\[[time_stamp()]]GAME: [text]" /proc/log_vote(text) - if (config.log_vote) + if(config.log_vote) diary << "\[[time_stamp()]]VOTE: [text]" /proc/log_access(text) - if (config.log_access) + if(config.log_access) diary << "\[[time_stamp()]]ACCESS: [text]" /proc/log_say(text) - if (config.log_say) + if(config.log_say) diary << "\[[time_stamp()]]SAY: [text]" /proc/log_ooc(text) - if (config.log_ooc) + if(config.log_ooc) diary << "\[[time_stamp()]]OOC: [text]" /proc/log_whisper(text) - if (config.log_whisper) + if(config.log_whisper) diary << "\[[time_stamp()]]WHISPER: [text]" /proc/log_emote(text) - if (config.log_emote) + if(config.log_emote) diary << "\[[time_stamp()]]EMOTE: [text]" /proc/log_attack(text) - if (config.log_attack) + if(config.log_attack) diary << "\[[time_stamp()]]ATTACK: [text]" //Seperate attack logs? Why? /proc/log_adminsay(text) - if (config.log_adminchat) + if(config.log_adminchat) diary << "\[[time_stamp()]]ADMINSAY: [text]" /proc/log_adminwarn(text) - if (config.log_adminwarn) + if(config.log_adminwarn) diary << "\[[time_stamp()]]ADMINWARN: [text]" /proc/log_pda(text) - if (config.log_pda) + if(config.log_pda) diary << "\[[time_stamp()]]PDA: [text][log_end]" /proc/log_misc(text) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 9d790b75345..4bc41808b96 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -116,7 +116,7 @@ proc/random_skin_tone(species = "Human") proc/skintone2racedescription(tone, species = "Human") if(species == "Human") - switch (tone) + switch(tone) if(30 to INFINITY) return "albino" if(20 to 30) return "pale" if(5 to 15) return "light skinned" @@ -190,15 +190,15 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul var/holding = user.get_active_hand() var/datum/progressbar/progbar - if (progress) + if(progress) progbar = new(user, time, target) var/endtime = world.time+time var/starttime = world.time . = 1 - while (world.time < endtime) + while(world.time < endtime) sleep(1) - if (progress) + if(progress) progbar.update(world.time - starttime) if(!user || !target) . = 0 @@ -213,7 +213,7 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying ) . = 0 break - if (progress) + if(progress) qdel(progbar) /proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1) @@ -236,15 +236,15 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul holdingnull = 0 //Users hand started holding something, check to see if it's still holding that var/datum/progressbar/progbar - if (progress) + if(progress) progbar = new(user, delay, target) var/endtime = world.time + delay var/starttime = world.time . = 1 - while (world.time < endtime) + while(world.time < endtime) sleep(1) - if (progress) + if(progress) progbar.update(world.time - starttime) if(drifting && !user.inertia_dir) @@ -269,5 +269,5 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul if(user.get_active_hand() != holding) . = 0 break - if (progress) + if(progress) qdel(progbar) \ No newline at end of file diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 0ac3da3a10a..0375b7aacea 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -1,13 +1,13 @@ var/church_name = null /proc/church_name() - if (church_name) + if(church_name) return church_name var/name = "" name += pick("Holy", "United", "First", "Second", "Last") - if (prob(20)) + if(prob(20)) name += " Space" name += " " + pick("Church", "Cathedral", "Body", "Worshippers", "Movement", "Witnesses") @@ -17,7 +17,7 @@ var/church_name = null var/command_name = null /proc/command_name() - if (command_name) + if(command_name) return command_name var/name = "Central Command" @@ -33,7 +33,7 @@ var/command_name = null var/religion_name = null /proc/religion_name() - if (religion_name) + if(religion_name) return religion_name var/name = "" @@ -47,12 +47,12 @@ var/religion_name = null return "Nyx" /proc/station_name() - if (station_name) + if(station_name) return station_name var/name = "" - if (config && config.server_name) + if(config && config.server_name) world.name = "[config.server_name]: [name]" else world.name = station_name @@ -65,7 +65,7 @@ var/religion_name = null var/new_station_name = "" //Rare: Pre-Prefix - if (prob(10)) + if(prob(10)) name = pick("Imperium", "Heretical", "Cuban", "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique", "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled", "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death", "Zybourne", "Central", "Main", "Government", "Uoi", "Fat", "Automated", "Experimental", "Augmented") new_station_name = name + " " name = "" @@ -107,7 +107,7 @@ var/religion_name = null station_name = name - if (config && config.server_name) + if(config && config.server_name) world.name = "[config.server_name]: [name]" else world.name = name @@ -116,7 +116,7 @@ var/religion_name = null var/syndicate_name = null /proc/syndicate_name() - if (syndicate_name) + if(syndicate_name) return syndicate_name var/name = "" @@ -125,11 +125,11 @@ var/syndicate_name = null name += pick("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Bonk", "Gene", "Gib") // Suffix - if (prob(80)) + if(prob(80)) name += " " // Full - if (prob(60)) + if(prob(60)) name += pick("Syndicate", "Consortium", "Collective", "Corporation", "Group", "Holdings", "Biotech", "Industries", "Systems", "Products", "Chemicals", "Enterprises", "Family", "Creations", "International", "Intergalactic", "Interplanetary", "Foundation", "Positronics", "Hive") // Broken else diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index f490f71df43..5020693a499 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -62,6 +62,6 @@ // Calls the above proc on each entry of a list to ensure its entries are clean /proc/sql_sanitize_text_list(var/list/l) var/list/new_list = l.Copy() - for (var/text in new_list) + for(var/text in new_list) sql_sanitize_text(text) return new_list \ No newline at end of file diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 0aa9589c510..b17cda4e560 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -154,15 +154,15 @@ proc/checkhtml(var/t) t = sanitize_simple(t, list("&#"=".")) var/p = findtext(t,"<",1) - while (p) //going through all the tags + while(p) //going through all the tags var/start = p++ var/tag = copytext(t,p, p+1) - if (tag != "/") - while (reject_bad_text(copytext(t, p, p+1), 1)) + if(tag != "/") + while(reject_bad_text(copytext(t, p, p+1), 1)) tag = copytext(t,start, p) p++ tag = copytext(t,start+1, p) - if (!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it + if(!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it t = copytext(t,1,start-1) + "<" + copytext(t,start+1) p = findtext(t,"<",p) return t @@ -218,7 +218,7 @@ proc/checkhtml(var/t) //Adds 'u' number of zeros ahead of the text 't' /proc/add_zero(t, u) - while (length(t) < u) + while(length(t) < u) t = "0[t]" return t @@ -236,15 +236,15 @@ proc/checkhtml(var/t) //Returns a string with reserved characters and spaces before the first letter removed /proc/trim_left(text) - for (var/i = 1 to length(text)) - if (text2ascii(text, i) > 32) + for(var/i = 1 to length(text)) + if(text2ascii(text, i) > 32) return copytext(text, i) return "" //Returns a string with reserved characters and spaces after the last letter removed /proc/trim_right(text) - for (var/i = length(text), i > 0, i--) - if (text2ascii(text, i) > 32) + for(var/i = length(text), i > 0, i--) + if(text2ascii(text, i) > 32) return copytext(text, 1, i + 1) return "" diff --git a/code/__HELPERS/timed_alerts.dm b/code/__HELPERS/timed_alerts.dm index 929341c3fc0..97e92900288 100644 --- a/code/__HELPERS/timed_alerts.dm +++ b/code/__HELPERS/timed_alerts.dm @@ -10,9 +10,9 @@ var/ref_result ref_result = ref_alert.timed_alert(src, question, title, time, choice1, choice2, choice3) - if (!ref_result) ref_result = default + if(!ref_result) ref_result = default - if (ref_alert) del(ref_alert) + if(ref_alert) del(ref_alert) return ref_result @@ -20,13 +20,13 @@ /mob/proc/timed_alert(question as text, title as text, default as text, time as num, \ choice1 as text, choice2 as text, choice3 as text) - if (client) return client.timed_alert(question, title, default, time, choice1, choice2, choice3) + if(client) return client.timed_alert(question, title, default, time, choice1, choice2, choice3) return /timed_alert/proc/timed_alert(client/ref_client, question, title, time, choice1, choice2, choice3) - if (!ref_client) return + if(!ref_client) return spawn (time) del(src) // When src is deleted, the proc ends immediately. The alert itself closes. var/ref_answer diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 0dd40091e1e..005ef4c2fc9 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -10,7 +10,7 @@ //Returns an integer given a hex input /proc/hex2num(hex) - if (!( istext(hex) )) + if(!( istext(hex) )) return var/num = 0 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 596dcda719c..6cd28a20a32 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -26,11 +26,11 @@ //Inverts the colour of an HTML string /proc/invertHTML(HTMLstring) - if (!( istext(HTMLstring) )) + if(!( istext(HTMLstring) )) CRASH("Given non-text argument!") return else - if (length(HTMLstring) != 7) + if(length(HTMLstring) != 7) CRASH("Given non-HTML argument!") return var/textr = copytext(HTMLstring, 2, 4) @@ -42,11 +42,11 @@ textr = num2hex(255 - r) textg = num2hex(255 - g) textb = num2hex(255 - b) - if (length(textr) < 2) + if(length(textr) < 2) textr = text("0[]", textr) - if (length(textg) < 2) + if(length(textg) < 2) textr = text("0[]", textg) - if (length(textb) < 2) + if(length(textb) < 2) textr = text("0[]", textb) return text("#[][][]", textr, textg, textb) return @@ -218,14 +218,14 @@ Turf and target are seperate in case you want to teleport some distance from a t //Returns whether or not a player is a guest using their ckey as an input /proc/IsGuestKey(key) - if (findtext(key, "Guest-", 1, 7) != 1) //was findtextEx + if(findtext(key, "Guest-", 1, 7) != 1) //was findtextEx return 0 var/i, ch, len = length(key) - for (i = 7, i <= len, ++i) + for(i = 7, i <= len, ++i) ch = text2ascii(key, i) - if (ch < 48 || ch > 57) + if(ch < 48 || ch > 57) return 0 return 1 @@ -234,7 +234,7 @@ Turf and target are seperate in case you want to teleport some distance from a t f = round(f) f = max(low, f) f = min(high, f) - if ((f % 2) == 0) //Ensure the last digit is an odd number + if((f % 2) == 0) //Ensure the last digit is an odd number f += 1 return f @@ -277,13 +277,13 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/freeborg() var/select = null var/list/borgs = list() - for (var/mob/living/silicon/robot/A in player_list) - if (A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone)) + for(var/mob/living/silicon/robot/A in player_list) + if(A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone)) continue var/name = "[A.real_name] ([A.modtype] [A.braintype])" borgs[name] = A - if (borgs.len) + if(borgs.len) select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs return borgs[select] @@ -352,15 +352,15 @@ Turf and target are seperate in case you want to teleport some distance from a t var/list/namecounts = list() for(var/mob/M in mobs) var/name = M.name - if (name in names) + if(name in names) namecounts[name]++ name = "[name] ([namecounts[name]])" else names.Add(name) namecounts[name] = 1 - if (M.real_name && M.real_name != M.name) + if(M.real_name && M.real_name != M.name) name += " \[[M.real_name]\]" - if (M.stat == 2) + if(M.stat == 2) if(istype(M, /mob/dead/observer/)) name += " \[ghost\]" else @@ -679,13 +679,13 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/src_min_x = 0 var/src_min_y = 0 - for (var/turf/T in turfs_src) + for(var/turf/T in turfs_src) if(T.x < src_min_x || !src_min_x) src_min_x = T.x if(T.y < src_min_y || !src_min_y) src_min_y = T.y var/trg_min_x = 0 var/trg_min_y = 0 - for (var/turf/T in turfs_trg) + for(var/turf/T in turfs_trg) if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y @@ -709,9 +709,9 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/list/toupdate = new/list() moving: - for (var/turf/T in refined_src) + for(var/turf/T in refined_src) var/datum/coords/C_src = refined_src[T] - for (var/turf/B in refined_trg) + for(var/turf/B in refined_trg) var/datum/coords/C_trg = refined_trg[B] if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos) @@ -845,13 +845,13 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/src_min_x = 0 var/src_min_y = 0 - for (var/turf/T in turfs_src) + for(var/turf/T in turfs_src) if(T.x < src_min_x || !src_min_x) src_min_x = T.x if(T.y < src_min_y || !src_min_y) src_min_y = T.y var/trg_min_x = 0 var/trg_min_y = 0 - for (var/turf/T in turfs_trg) + for(var/turf/T in turfs_trg) if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y @@ -877,9 +877,9 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl moving: - for (var/turf/T in refined_src) + for(var/turf/T in refined_src) var/datum/coords/C_src = refined_src[T] - for (var/turf/B in refined_trg) + for(var/turf/B in refined_trg) var/datum/coords/C_trg = refined_trg[B] if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos) @@ -990,24 +990,24 @@ proc/oview_or_orange(distance = world.view , center = usr , type) proc/get_mob_with_client_list() var/list/mobs = list() for(var/mob/M in mob_list) - if (M.client) + if(M.client) mobs += M return mobs /proc/parse_zone(zone) if(zone == "r_hand") return "right hand" - else if (zone == "l_hand") return "left hand" - else if (zone == "l_arm") return "left arm" - else if (zone == "r_arm") return "right arm" - else if (zone == "l_leg") return "left leg" - else if (zone == "r_leg") return "right leg" - else if (zone == "l_foot") return "left foot" - else if (zone == "r_foot") return "right foot" - else if (zone == "l_hand") return "left hand" - else if (zone == "r_hand") return "right hand" - else if (zone == "l_foot") return "left foot" - else if (zone == "r_foot") return "right foot" + else if(zone == "l_hand") return "left hand" + else if(zone == "l_arm") return "left arm" + else if(zone == "r_arm") return "right arm" + else if(zone == "l_leg") return "left leg" + else if(zone == "r_leg") return "right leg" + else if(zone == "l_foot") return "left foot" + else if(zone == "r_foot") return "right foot" + else if(zone == "l_hand") return "left hand" + else if(zone == "r_hand") return "right hand" + else if(zone == "l_foot") return "left foot" + else if(zone == "r_foot") return "right foot" else return zone //Finds the distance between two atoms, in pixels @@ -1139,15 +1139,15 @@ var/global/list/common_tools = list( //Whether or not the given item counts as sharp in terms of dealing damage /proc/is_sharp(obj/O as obj) - if (!O) return 0 - if (O.sharp) return 1 - if (O.edge) return 1 + if(!O) return 0 + if(O.sharp) return 1 + if(O.edge) return 1 return 0 //Whether or not the given item counts as cutting with an edge in terms of removing limbs /proc/has_edge(obj/O as obj) - if (!O) return 0 - if (O.edge) return 1 + if(!O) return 0 + if(O.edge) return 1 return 0 //Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. @@ -1521,7 +1521,7 @@ var/mob/dview/dview_mob = new lastloc = loc sleep(0.6) - if (orbiting == A) //make sure we haven't started orbiting something else. + if(orbiting == A) //make sure we haven't started orbiting something else. orbiting = null SpinAnimation(0,0) @@ -1672,7 +1672,7 @@ var/mob/dview/dview_mob = new /proc/pick_closest_path(value) var/list/matches = get_fancy_list_of_types() - if (!isnull(value) && value!="") + if(!isnull(value) && value!="") matches = filter_fancy_list(matches, value) if(matches.len==0) @@ -1706,13 +1706,13 @@ var/list/TYPES_SHORTCUTS = list( var/global/list/g_fancy_list_of_types = null /proc/get_fancy_list_of_types() - if (isnull(g_fancy_list_of_types)) //init + if(isnull(g_fancy_list_of_types)) //init var/list/temp = sortList(subtypesof(/atom) - typesof(/area) - /atom/movable) g_fancy_list_of_types = new(temp.len) for(var/type in temp) var/typename = "[type]" - for (var/tn in TYPES_SHORTCUTS) - if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) + for(var/tn in TYPES_SHORTCUTS) + if(copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/")) break g_fancy_list_of_types[typename] = type @@ -1730,10 +1730,10 @@ var/global/list/g_fancy_list_of_types = null /proc/stoplag() . = 1 sleep(world.tick_lag) - if (world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, still not enough tick, sleep for more. + if(world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, still not enough tick, sleep for more. . += 2 sleep(world.tick_lag*2) - if (world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, STILL not enough tick, sleep for more. + if(world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, STILL not enough tick, sleep for more. . += 4 sleep(world.tick_lag*4) //you might be thinking of adding more steps to this, or making it use a loop and a counter var diff --git a/code/_hooks/hooks.dm b/code/_hooks/hooks.dm index b78526bfc2b..ccd0eb04722 100644 --- a/code/_hooks/hooks.dm +++ b/code/_hooks/hooks.dm @@ -29,26 +29,26 @@ var/global/list/hooks = list() /proc/SetupHooks() - for (var/hook_path in typesof(/hook)) + for(var/hook_path in typesof(/hook)) var/hook/hook = new hook_path hooks[hook.name] = hook // log_to_dd("Found hook: " + hook.name) - for (var/hook_path in typesof(/hook_handler)) + for(var/hook_path in typesof(/hook_handler)) var/hook_handler/hook_handler = new hook_path - for (var/name in hooks) - if (hascall(hook_handler, "On" + name)) + for(var/name in hooks) + if(hascall(hook_handler, "On" + name)) var/hook/hook = hooks[name] hook.handlers += hook_handler // log_to_dd("Found hook handler for: " + name) - for (var/hook/hook in hooks) + for(var/hook/hook in hooks) hook.Setup() /proc/CallHook(var/name as text, var/list/args) var/hook/hook = hooks[name] - if (!hook) + if(!hook) //log_to_dd("WARNING: Hook with name " + name + " does not exist") return - if (hook.Called(args)) + if(hook.Called(args)) return - for (var/hook_handler/hook_handler in hook.handlers) + for(var/hook_handler/hook_handler in hook.handlers) call(hook_handler, "On" + hook.name)(args) \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 58fb139ce33..1b32a9201a3 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -143,7 +143,7 @@ for(var/i=1, i 0) + if(hitsound && force > 0) playsound(loc, hitsound, 50, 1, -1) ///////////////////////// user.lastattacked = M @@ -177,9 +177,9 @@ else M.take_organ_damage(power) - if (prob(33)) // Added blood for whacking non-humans too + if(prob(33)) // Added blood for whacking non-humans too var/turf/simulated/location = M.loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_blood_floor(M) if("fire") M.take_organ_damage(0, power) diff --git a/code/_onclick/oldcode.dm b/code/_onclick/oldcode.dm index 89b1131a6f0..a68f9668e78 100644 --- a/code/_onclick/oldcode.dm +++ b/code/_onclick/oldcode.dm @@ -2,7 +2,7 @@ if(!usr) return // ------- TIME SINCE LAST CLICK ------- - if (world.time <= usr:lastDblClick+1) + if(world.time <= usr:lastDblClick+1) return else usr:lastDblClick = world.time @@ -38,15 +38,15 @@ // ------- AI ------- - else if (istype(usr, /mob/living/silicon/ai)) + else if(istype(usr, /mob/living/silicon/ai)) var/mob/living/silicon/ai/ai = usr - if (ai.control_disabled) + if(ai.control_disabled) return // ------- CYBORG ------- - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) var/mob/living/silicon/robot/bot = usr - if (bot.lockcharge) return + if(bot.lockcharge) return ..() @@ -106,7 +106,7 @@ W = null */ // ------- ATTACK SELF ------- - if (W == src && usr.stat == 0) + if(W == src && usr.stat == 0) W.attack_self(usr) if(usr.hand) usr.update_inv_l_hand(0) //update in-hand overlays @@ -115,14 +115,14 @@ return // ------- PARALYSIS, STUN, WEAKENED, DEAD, (And not AI) ------- - if (((usr.paralysis || usr.stunned || usr.weakened) && !istype(usr, /mob/living/silicon/ai)) || usr.stat != 0) + if(((usr.paralysis || usr.stunned || usr.weakened) && !istype(usr, /mob/living/silicon/ai)) || usr.stat != 0) return // ------- CLICKING STUFF IN CONTAINERS ------- - if ((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) - if (istype(usr, /mob/living/silicon/ai)) + if((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) + if(istype(usr, /mob/living/silicon/ai)) var/mob/living/silicon/ai/ai = usr - if (ai.control_disabled || ai.malfhacking) + if(ai.control_disabled || ai.malfhacking) return else return @@ -141,11 +141,11 @@ // to_chat(world, "according to dblclick(), t5 is [t5]") // ------- ACTUALLY DETERMINING STUFF ------- - if (((t5 || (W && (W.flags & USEDELAY))) && !( istype(src, /obj/screen) ))) + if(((t5 || (W && (W.flags & USEDELAY))) && !( istype(src, /obj/screen) ))) // ------- ( CAN USE ITEM OR HAS 1 SECOND USE DELAY ) AND NOT CLICKING ON SCREEN ------- - if (usr.next_move < world.time) + if(usr.next_move < world.time) usr.prev_move = usr.next_move usr.next_move = world.time + 10 else @@ -154,14 +154,14 @@ // ------- DELAY CHECK PASSED ------- - if ((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) + if((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) // ------- CLICKED OBJECT EXISTS IN GAME WORLD, DISTANCE FROM PERSON TO OBJECT IS 1 SQUARE OR THEY'RE ON THE SAME SQUARE ------- var/direct = get_dir(usr, src) var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc ) var/ok = 0 - if ( (direct - 1) & direct) + if( (direct - 1) & direct) // ------- CLICKED OBJECT IS LOCATED IN A DIAGONAL POSITION FROM THE PERSON ------- @@ -259,39 +259,39 @@ D = null // ------- DUMMY OBJECT'S SERVED IT'S PURPOSE, IT'S REWARDED WITH A SWIFT DELETE ------- - if (!( ok )) + if(!( ok )) // ------- TESTS ABOVE DETERMINED YOU CANNOT REACH THE TILE ------- return 0 - if (!( usr.restrained() || (usr.lying && usr.buckled!=src) )) + if(!( usr.restrained() || (usr.lying && usr.buckled!=src) )) // ------- YOU ARE NOT REASTRAINED ------- - if (W) + if(W) // ------- YOU HAVE AN ITEM IN YOUR HAND - HANDLE ATTACKBY AND AFTERATTACK ------- var/ignoreAA = 0 //Ignore afterattack(). Surgery uses this. - if (t5) + if(t5) ignoreAA = src.attackby(W, usr, params) - if (W && !ignoreAA) + if(W && !ignoreAA) W.afterattack(src, usr, (t5 ? 1 : 0), params) else // ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) // ------- YOU ARE HUMAN ------- src.attack_hand(usr, usr.hand) else // ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED ------- - if (istype(usr, /mob/living/carbon/monkey)) + if(istype(usr, /mob/living/carbon/monkey)) src.attack_paw(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) if(usr.m_intent == "walk" && istype(usr, /mob/living/carbon/alien/humanoid/hunter)) usr.m_intent = "run" usr.hud_used.move_intent.icon_state = "running" usr.update_icons() src.attack_alien(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/larva)) + else if(istype(usr, /mob/living/carbon/alien/larva)) src.attack_larva(usr) - else if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) src.attack_ai(usr, usr.hand) else if(istype(usr, /mob/living/carbon/slime)) src.attack_slime(usr) @@ -299,51 +299,51 @@ src.attack_animal(usr) else // ------- YOU ARE RESTRAINED. DETERMINE WHAT YOU ARE AND ATTACK WITH THE PROPER HAND_X PROC ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) src.hand_h(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/monkey)) + else if(istype(usr, /mob/living/carbon/monkey)) src.hand_p(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) src.hand_al(usr, usr.hand) - else if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) src.hand_a(usr, usr.hand) else // ------- ITEM INACESSIBLE OR CLICKING ON SCREEN ------- - if (istype(src, /obj/screen)) + if(istype(src, /obj/screen)) // ------- IT'S THE HUD YOU'RE CLICKING ON ------- usr.prev_move = usr.next_move usr:lastDblClick = world.time + 2 - if (usr.next_move < world.time) + if(usr.next_move < world.time) usr.next_move = world.time + 2 else return // ------- 2 DECISECOND DELAY FOR CLICKING PASSED ------- - if (!( usr.restrained() )) + if(!( usr.restrained() )) // ------- YOU ARE NOT RESTRAINED ------- - if ((W && !( istype(src, /obj/screen) ))) + if((W && !( istype(src, /obj/screen) ))) // ------- IT SHOULD NEVER GET TO HERE, DUE TO THE ISTYPE(SRC, /OBJ/SCREEN) FROM PREVIOUS IF-S - I TESTED IT WITH A DEBUG OUTPUT AND I COULDN'T GET THIST TO SHOW UP. ------- src.attackby(W, usr, params) - if (W) + if(W) W.afterattack(src, usr,, params) else // ------- YOU ARE NOT RESTRAINED, AND ARE CLICKING A HUD OBJECT ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) src.attack_hand(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/monkey)) + else if(istype(usr, /mob/living/carbon/monkey)) src.attack_paw(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) src.attack_alien(usr, usr.hand) else // ------- YOU ARE RESTRAINED CLICKING ON A HUD OBJECT ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) src.hand_h(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/monkey)) + else if(istype(usr, /mob/living/carbon/monkey)) src.hand_p(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) src.hand_al(usr, usr.hand) else // ------- YOU ARE CLICKING ON AN OBJECT THAT'S INACCESSIBLE TO YOU AND IS NOT YOUR HUD ------- diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 620dafca4ec..55e277b4d67 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -171,7 +171,7 @@ main.restartProcess(src.name) /datum/controller/process/proc/kill() - if (!killed) + if(!killed) var/msg = "[name] process was killed at tick #[ticks]." log_debug(msg) message_admins(msg) @@ -186,22 +186,22 @@ // Do not call this directly - use SHECK or SCHECK_EVERY /datum/controller/process/proc/sleepCheck(var/tickId = 0) calls_since_last_scheck = 0 - if (killed) + if(killed) // The kill proc is the only place where killed is set. // The kill proc should have deleted this datum, and all sleeping procs that are // owned by it. CRASH("A killed process is still running somehow...") - if (hung) + if(hung) // This will only really help if the doWork proc ends up in an infinite loop. handleHung() CRASH("Process [name] hung and was restarted.") - if (main.getCurrentTickElapsedTime() > main.timeAllowance) + if(main.getCurrentTickElapsedTime() > main.timeAllowance) sleep(world.tick_lag) cpu_defer_count++ last_slept = 0 else - if (TimeOfTick > last_slept + sleep_interval) + if(TimeOfTick > last_slept + sleep_interval) // If we haven't slept in sleep_interval deciseconds, sleep to allow other work to proceed. sleep(0) last_slept = TimeOfTick @@ -213,14 +213,14 @@ var/elapsedTime = getElapsedTime() - if (hung) + if(hung) handleHung() return - else if (elapsedTime > hang_restart_time) + else if(elapsedTime > hang_restart_time) hung() - else if (elapsedTime > hang_alert_time) + else if(elapsedTime > hang_alert_time) setStatus(PROCESS_STATUS_PROBABLY_HUNG) - else if (elapsedTime > hang_warning_time) + else if(elapsedTime > hang_warning_time) setStatus(PROCESS_STATUS_MAYBE_HUNG) diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm index 86e1fc5bbe9..494e776650d 100644 --- a/code/controllers/ProcessScheduler/core/processScheduler.dm +++ b/code/controllers/ProcessScheduler/core/processScheduler.dm @@ -66,7 +66,7 @@ var/global/datum/controller/processScheduler/processScheduler * this treatment. */ /datum/controller/processScheduler/proc/deferSetupFor(var/processPath) - if (!(processPath in deferredSetupList)) + if(!(processPath in deferredSetupList)) deferredSetupList += processPath /datum/controller/processScheduler/proc/setup() @@ -77,11 +77,11 @@ var/global/datum/controller/processScheduler/processScheduler var/process // Add all the processes we can find, except for the ticker - for (process in subtypesof(/datum/controller/process)) - if (!(process in deferredSetupList)) + for(process in subtypesof(/datum/controller/process)) + if(!(process in deferredSetupList)) addProcess(new process(src)) - for (process in deferredSetupList) + for(process in deferredSetupList) addProcess(new process(src)) /datum/controller/processScheduler/proc/start() @@ -114,7 +114,7 @@ var/global/datum/controller/processScheduler/processScheduler for(var/datum/controller/process/p in running) p.update() - if (isnull(p)) // Process was killed + if(isnull(p)) // Process was killed continue var/status = p.getStatus() @@ -132,11 +132,11 @@ var/global/datum/controller/processScheduler/processScheduler /datum/controller/processScheduler/proc/queueProcesses() for(var/datum/controller/process/p in processes) // Don't double-queue, don't queue running processes - if (p.disabled || p.running || p.queued || !p.idle) + if(p.disabled || p.running || p.queued || !p.idle) continue // If the process should be running by now, go ahead and queue it - if (world.time >= last_queued[p] + p.schedule_interval) + if(world.time >= last_queued[p] + p.schedule_interval) setQueuedProcessState(p) /datum/controller/processScheduler/proc/runQueuedProcesses() @@ -217,34 +217,34 @@ var/global/datum/controller/processScheduler/processScheduler recordEnd(process) /datum/controller/processScheduler/proc/setIdleProcessState(var/datum/controller/process/process) - if (process in running) + if(process in running) running -= process - if (process in queued) + if(process in queued) queued -= process - if (!(process in idle)) + if(!(process in idle)) idle += process /datum/controller/processScheduler/proc/setQueuedProcessState(var/datum/controller/process/process) - if (process in running) + if(process in running) running -= process - if (process in idle) + if(process in idle) idle -= process - if (!(process in queued)) + if(!(process in queued)) queued += process // The other state transitions are handled internally by the process. process.queued() /datum/controller/processScheduler/proc/setRunningProcessState(var/datum/controller/process/process) - if (process in queued) + if(process in queued) queued -= process - if (process in idle) + if(process in idle) idle -= process - if (!(process in running)) + if(!(process in running)) running += process /datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null) - if (isnull(time)) + if(isnull(time)) time = TimeOfGame last_queued[process] = world.time last_start[process] = time @@ -253,7 +253,7 @@ var/global/datum/controller/processScheduler/processScheduler last_start[process] = time /datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null) - if (isnull(time)) + if(isnull(time)) time = TimeOfGame var/lastRunTime = time - last_start[process] @@ -273,7 +273,7 @@ var/global/datum/controller/processScheduler/processScheduler highest_run_time[process] = time var/list/lastTwenty = last_twenty_run_times[process] - if (lastTwenty.len == 20) + if(lastTwenty.len == 20) lastTwenty.Cut(1, 2) lastTwenty.len++ lastTwenty[lastTwenty.len] = time @@ -304,7 +304,7 @@ var/global/datum/controller/processScheduler/processScheduler /datum/controller/processScheduler/proc/getStatusData() var/list/data = new - for (var/datum/controller/process/p in processes) + for(var/datum/controller/process/p in processes) data.len++ data[data.len] = p.getContextData() @@ -314,14 +314,14 @@ var/global/datum/controller/processScheduler/processScheduler return processes.len /datum/controller/processScheduler/proc/hasProcess(var/processName as text) - if (nameToProcessMap[processName]) + if(nameToProcessMap[processName]) return 1 /datum/controller/processScheduler/proc/killProcess(var/processName as text) restartProcess(processName) /datum/controller/processScheduler/proc/restartProcess(var/processName as text) - if (hasProcess(processName)) + if(hasProcess(processName)) var/datum/controller/process/oldInstance = nameToProcessMap[processName] var/datum/controller/process/newInstance = new oldInstance.type(src) newInstance._copyStateFrom(oldInstance) @@ -329,24 +329,24 @@ var/global/datum/controller/processScheduler/processScheduler oldInstance.kill() /datum/controller/processScheduler/proc/enableProcess(var/processName as text) - if (hasProcess(processName)) + if(hasProcess(processName)) var/datum/controller/process/process = nameToProcessMap[processName] process.enable() /datum/controller/processScheduler/proc/disableProcess(var/processName as text) - if (hasProcess(processName)) + if(hasProcess(processName)) var/datum/controller/process/process = nameToProcessMap[processName] process.disable() /datum/controller/processScheduler/proc/getCurrentTickElapsedTime() - if (world.time > currentTick) + if(world.time > currentTick) updateCurrentTickData() return 0 else return TimeOfTick /datum/controller/processScheduler/proc/updateCurrentTickData() - if (world.time > currentTick) + if(world.time > currentTick) // New tick! currentTick = world.time updateTimeAllowance() diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 43bee48f267..dc7cbe6a24d 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -153,7 +153,7 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI /proc/frequency_span_class(var/frequency) // Antags! - if (frequency in ANTAG_FREQS) + if(frequency in ANTAG_FREQS) return "syndradio" // centcomm channels (deathsquid and ert) if(frequency in CENT_FREQS) @@ -167,7 +167,7 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI // department radio formatting (poorly optimized, ugh) if(frequency == SEC_FREQ) return "secradio" - if (frequency == ENG_FREQ) + if(frequency == ENG_FREQ) return "engradio" if(frequency == SCI_FREQ) return "sciradio" @@ -265,17 +265,17 @@ var/global/datum/controller/radio/radio_controller if(!start_point) qdel(signal) return 0 - if (filter) + if(filter) send_to_filter(source, signal, filter, start_point, range) send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) else //Broadcast the signal to everyone! - for (var/next_filter in devices) + for(var/next_filter in devices) send_to_filter(source, signal, next_filter, start_point, range) //Sends a signal to all machines belonging to a given filter. Should be called by post_signal() /datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) - if (range && !start_point) + if(range && !start_point) return for(var/obj/device in devices[filter]) @@ -291,11 +291,11 @@ var/global/datum/controller/radio/radio_controller device.receive_signal(signal, TRANSMISSION_RADIO, frequency) /datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) - if (!filter) + if(!filter) filter = RADIO_DEFAULT //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") var/list/obj/devices_line = devices[filter] - if (!devices_line) + if(!devices_line) devices_line = new devices[filter] = devices_line devices_line+=device @@ -305,12 +305,12 @@ var/global/datum/controller/radio/radio_controller //log_admin("DEBUG: devices(filter_str).len=[l]") /datum/radio_frequency/proc/remove_listener(obj/device) - for (var/devices_filter in devices) + for(var/devices_filter in devices) var/list/devices_line = devices[devices_filter] devices_line-=device - while (null in devices_line) + while(null in devices_line) devices_line -= null - if (devices_line.len==0) + if(devices_line.len==0) devices -= devices_filter qdel(devices_line) @@ -335,11 +335,11 @@ var/global/datum/controller/radio/radio_controller frequency = model.frequency /datum/signal/proc/debug_print() - if (source) + if(source) . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" else . = "signal = {source = '[source]' ()\n" - for (var/i in data) + for(var/i in data) . += "data\[\"[i]\"\] = \"[data[i]]\"\n" if(islist(data[i])) var/list/L = data[i] diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index b0e3059ee6d..d3da4ccf1c3 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -181,18 +181,18 @@ /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) - for (var/T in L) + for(var/T in L) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). var/datum/game_mode/M = new T() - if (M.config_tag) + if(M.config_tag) if(!(M.config_tag in modes)) // ensure each mode is added only once diary << "Adding game mode [M.name] ([M.config_tag]) to configuration." src.modes += M.config_tag src.mode_names[M.config_tag] = M.name src.probabilities[M.config_tag] = M.probability - if (M.votable) + if(M.votable) src.votable_modes += M.config_tag qdel(M) src.votable_modes += "secret" @@ -204,188 +204,188 @@ if(!t) continue t = trim(t) - if (length(t) == 0) + if(length(t) == 0) continue - else if (copytext(t, 1, 2) == "#") + else if(copytext(t, 1, 2) == "#") continue var/pos = findtext(t, " ") var/name = null var/value = null - if (pos) + if(pos) name = lowertext(copytext(t, 1, pos)) value = copytext(t, pos + 1) else name = lowertext(t) - if (!name) + if(!name) continue if(type == "config") - switch (name) - if ("resource_urls") + switch(name) + if("resource_urls") config.resource_urls = splittext(value, " ") - if ("admin_legacy_system") + if("admin_legacy_system") config.admin_legacy_system = 1 - if ("ban_legacy_system") + if("ban_legacy_system") config.ban_legacy_system = 1 - if ("use_age_restriction_for_jobs") + if("use_age_restriction_for_jobs") config.use_age_restriction_for_jobs = 1 - if ("use_age_restriction_for_antags") + if("use_age_restriction_for_antags") config.use_age_restriction_for_antags = 1 - if ("jobs_have_minimal_access") + if("jobs_have_minimal_access") config.jobs_have_minimal_access = 1 - if ("log_ooc") + if("log_ooc") config.log_ooc = 1 - if ("log_access") + if("log_access") config.log_access = 1 - if ("log_say") + if("log_say") config.log_say = 1 - if ("log_admin") + if("log_admin") config.log_admin = 1 - if ("log_debug") + if("log_debug") config.log_debug = text2num(value) - if ("log_game") + if("log_game") config.log_game = 1 - if ("log_vote") + if("log_vote") config.log_vote = 1 - if ("log_whisper") + if("log_whisper") config.log_whisper = 1 - if ("log_attack") + if("log_attack") config.log_attack = 1 - if ("log_emote") + if("log_emote") config.log_emote = 1 - if ("log_adminchat") + if("log_adminchat") config.log_adminchat = 1 - if ("log_adminwarn") + if("log_adminwarn") config.log_adminwarn = 1 - if ("log_pda") + if("log_pda") config.log_pda = 1 - if ("log_world_output") + if("log_world_output") config.log_world_output = 1 - if ("log_hrefs") + if("log_hrefs") config.log_hrefs = 1 - if ("log_runtime") + if("log_runtime") config.log_runtime = 1 - if ("mentors") + if("mentors") config.mods_are_mentors = 1 if("allow_admin_ooccolor") config.allow_admin_ooccolor = 1 - if ("allow_vote_restart") + if("allow_vote_restart") config.allow_vote_restart = 1 - if ("allow_vote_mode") + if("allow_vote_mode") config.allow_vote_mode = 1 if("no_dead_vote") config.vote_no_dead = 1 - if ("default_no_vote") + if("default_no_vote") config.vote_no_default = 1 - if ("vote_delay") + if("vote_delay") config.vote_delay = text2num(value) - if ("vote_period") + if("vote_period") config.vote_period = text2num(value) - if ("allow_ai") + if("allow_ai") config.allow_ai = 1 -// if ("authentication") +// if("authentication") // config.enable_authentication = 1 - if ("norespawn") + if("norespawn") config.respawn = 0 - if ("servername") + if("servername") config.server_name = value - if ("serversuffix") + if("serversuffix") config.server_suffix = 1 - if ("nudge_script_path") + if("nudge_script_path") config.nudge_script_path = value - if ("hostedby") + if("hostedby") config.hostedby = value - if ("server") + if("server") config.server = value - if ("banappeals") + if("banappeals") config.banappeals = value - if ("wikiurl") + if("wikiurl") config.wikiurl = value - if ("forumurl") + if("forumurl") config.forumurl = value - if ("rulesurl") + if("rulesurl") config.rulesurl = value - if ("donationsurl") + if("donationsurl") config.donationsurl = value - if ("repositoryurl") + if("repositoryurl") config.repositoryurl = value - if ("guest_jobban") + if("guest_jobban") config.guest_jobban = 1 - if ("guest_ban") + if("guest_ban") guests_allowed = 0 - if ("usewhitelist") + if("usewhitelist") config.usewhitelist = 1 - if ("feature_object_spell_system") + if("feature_object_spell_system") config.feature_object_spell_system = 1 - if ("allow_metadata") + if("allow_metadata") config.allow_Metadata = 1 - if ("traitor_scaling") + if("traitor_scaling") config.traitor_scaling = 1 if("protect_roles_from_antagonist") config.protect_roles_from_antagonist = 1 - if ("probability") + if("probability") var/prob_pos = findtext(value, " ") var/prob_name = null var/prob_value = null - if (prob_pos) + if(prob_pos) prob_name = lowertext(copytext(value, 1, prob_pos)) prob_value = copytext(value, prob_pos + 1) - if (prob_name in config.modes) + if(prob_name in config.modes) config.probabilities[prob_name] = text2num(prob_value) else diary << "Unknown game mode probability configuration definition: [prob_name]." @@ -611,11 +611,11 @@ config.reactionary_explosions = 1 if("bombcap") var/BombCap = text2num(value) - if (!BombCap) + if(!BombCap) continue - if (BombCap < 4) + if(BombCap < 4) BombCap = 4 - if (BombCap > 128) + if(BombCap > 128) BombCap = 128 MAX_EX_DEVESTATION_RANGE = round(BombCap/4) @@ -634,36 +634,36 @@ if(!t) continue t = trim(t) - if (length(t) == 0) + if(length(t) == 0) continue - else if (copytext(t, 1, 2) == "#") + else if(copytext(t, 1, 2) == "#") continue var/pos = findtext(t, " ") var/name = null var/value = null - if (pos) + if(pos) name = lowertext(copytext(t, 1, pos)) value = copytext(t, pos + 1) else name = lowertext(t) - if (!name) + if(!name) continue - switch (name) + switch(name) if("sql_enabled") config.sql_enabled = 1 - if ("address") + if("address") sqladdress = value - if ("port") + if("port") sqlport = value - if ("feedback_database") + if("feedback_database") sqlfdbkdb = value - if ("feedback_login") + if("feedback_login") sqlfdbklogin = value - if ("feedback_password") + if("feedback_password") sqlfdbkpass = value if("feedback_tableprefix") sqlfdbktableprefix = value @@ -676,9 +676,9 @@ if(!t) continue t = trim(t) - if (length(t) == 0) + if(length(t) == 0) continue - else if (copytext(t, 1, 2) == "#") + else if(copytext(t, 1, 2) == "#") continue config.overflow_whitelist += t @@ -686,25 +686,25 @@ /datum/configuration/proc/pick_mode(mode_name) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). - for (var/T in subtypesof(/datum/game_mode)) + for(var/T in subtypesof(/datum/game_mode)) var/datum/game_mode/M = new T() - if (M.config_tag && M.config_tag == mode_name) + if(M.config_tag && M.config_tag == mode_name) return M qdel(M) return new /datum/game_mode/extended() /datum/configuration/proc/get_runnable_modes() var/list/datum/game_mode/runnable_modes = new - for (var/T in subtypesof(/datum/game_mode)) + for(var/T in subtypesof(/datum/game_mode)) var/datum/game_mode/M = new T() // to_chat(world, "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]") - if (!(M.config_tag in modes)) + if(!(M.config_tag in modes)) qdel(M) continue - if (probabilities[M.config_tag]<=0) + if(probabilities[M.config_tag]<=0) qdel(M) continue - if (M.can_start()) + if(M.can_start()) runnable_modes[M] = probabilities[M.config_tag] // to_chat(world, "DEBUG: runnable_mode\[[runnable_modes.len]\] = [M.config_tag]") return runnable_modes diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 2775590dab6..afb0e68d83f 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -18,8 +18,8 @@ var/global/datum/controller/failsafe/failsafe . = ..() // There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one). - if (failsafe != src) - if (istype(failsafe)) + if(failsafe != src) + if(istype(failsafe)) recover() qdel(failsafe) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 97c490852b6..25b038554cc 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -28,7 +28,7 @@ if("Master") debug_variables(master_controller) feedback_add_details("admin_verb","DMC") - if ("failsafe") + if("failsafe") debug_variables(failsafe) feedback_add_details("admin_verb", "dfailsafe") if("Ticker") diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 7816e88e556..52c976ec470 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -200,7 +200,7 @@ datum/controller/vote return 0 choices.Add(config.votable_modes) if("crew_transfer") - if (check_rights(R_ADMIN|R_MOD)) + if(check_rights(R_ADMIN|R_MOD)) if(ticker.current_state <= 2) return 0 question = "End the shift?" diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 4af13e256fd..0f796798d26 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -83,17 +83,17 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen if(full_sync || supplied_laws.len) S.laws.clear_supplied_laws() - for (var/datum/ai_law/law in ion_laws) + for(var/datum/ai_law/law in ion_laws) S.laws.add_ion_law(law.law) - for (var/datum/ai_law/law in inherent_laws) + for(var/datum/ai_law/law in inherent_laws) S.laws.add_inherent_law(law.law) - for (var/datum/ai_law/law in supplied_laws) + for(var/datum/ai_law/law in supplied_laws) if(law) S.laws.add_supplied_law(law.index, law.law) /mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) - if (!is_special_character(src) || mind.original != src) + if(!is_special_character(src) || mind.original != src) if(zeroth_law_borg) laws.set_zeroth_law(zeroth_law_borg.law) else if(zeroth_law) @@ -159,7 +159,7 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen if(supplied_laws.len >= number && supplied_laws[number]) delete_law(supplied_laws[number]) - while (src.supplied_laws.len < number) + while(src.supplied_laws.len < number) src.supplied_laws += "" if(state_supplied.len < supplied_laws.len) state_supplied += 1 diff --git a/code/datums/browser.dm b/code/datums/browser.dm index e8f17f17ad0..85f8e52e89d 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -20,13 +20,13 @@ user = nuser window_id = nwindow_id - if (ntitle) + if(ntitle) title = format_text(ntitle) - if (nwidth) + if(nwidth) width = nwidth - if (nheight) + if(nheight) height = nheight - if (nref) + if(nref) ref = nref add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs @@ -60,18 +60,18 @@ /datum/browser/proc/get_header() var/key var/filename - for (key in stylesheets) + for(key in stylesheets) filename = "[ckey(key)].css" user << browse_rsc(stylesheets[key], filename) head_content += "" - for (key in scripts) + for(key in scripts) filename = "[ckey(key)].js" user << browse_rsc(scripts[key], filename) head_content += "" var/title_attributes = "class='uiTitle'" - if (title_image) + if(title_image) title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'" return {" @@ -103,10 +103,10 @@ /datum/browser/proc/open(var/use_onclose = 1) var/window_size = "" - if (width && height) + if(width && height) window_size = "size=[width]x[height];" user << browse(get_content(), "window=[window_id];[window_size][window_options]") - if (use_onclose) + if(use_onclose) onclose(user, window_id, ref) /datum/browser/proc/close() @@ -118,7 +118,7 @@ /mob/proc/browse_rsc_icon(icon, icon_state, dir = -1) /* var/icon/I - if (dir >= 0) + if(dir >= 0) I = new /icon(icon, icon_state, dir) else I = new /icon(icon, icon_state) diff --git a/code/datums/cache/apc.dm b/code/datums/cache/apc.dm index f50b0a8e121..4271886ac4b 100644 --- a/code/datums/cache/apc.dm +++ b/code/datums/cache/apc.dm @@ -11,7 +11,7 @@ var/global/datum/repository/apc/apc_repository = new() if(world.time < cache_entry.timestamp) return cache_entry.data - if (powermonitor && !isnull(powermonitor.powernet)) + if(powermonitor && !isnull(powermonitor.powernet)) var/list/L = list() for(var/obj/machinery/power/terminal/term in powermonitor.powernet.nodes) if(istype(term.master, /obj/machinery/power/apc)) diff --git a/code/datums/cache/crew.dm b/code/datums/cache/crew.dm index 0afb70a4404..2912b8c6753 100644 --- a/code/datums/cache/crew.dm +++ b/code/datums/cache/crew.dm @@ -62,6 +62,6 @@ var/global/datum/repository/crew/crew_repository = new() for(var/mob/living/carbon/human/H in mob_list) if(istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/C = H.w_uniform - if (C.has_sensor) + if(C.has_sensor) tracked |= C return tracked diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index ff081676b43..f9c3ce39b08 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -17,7 +17,7 @@ var/real_title = assignment for(var/datum/data/record/t in data_core.general) - if (t) + if(t) if(t.fields["name"] == name) foundrecord = t break @@ -131,7 +131,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) var/obj/item/organ/external/head/head_organ = H.get_organ("head") var/g = "m" - if (H.gender == FEMALE) + if(H.gender == FEMALE) g = "f" var/icon/icobase = H.species.icobase @@ -153,7 +153,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) // Skin tone if(H.species.bodyflags & HAS_SKIN_TONE) - if (H.s_tone >= 0) + if(H.s_tone >= 0) preview_icon.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD) else preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index eeb26f5f6f2..1413b5c7dc9 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -20,7 +20,7 @@ title = "[A.name] (\ref[A]) = [A.type]" #ifdef VARSICON - if (A.icon) + if(A.icon) body += debug_variable("icon", new/icon(A.icon, A.icon_state, A.dir), 0) #endif @@ -43,11 +43,11 @@ if(event.keyCode == 13){ //Enter / return var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.style.backgroundColor == "#ffee88" ) + if( li.style.backgroundColor == "#ffee88" ) { alist = lis\[i\].getElementsByTagName("a") if(alist.length > 0){ @@ -62,11 +62,11 @@ if(event.keyCode == 38){ //Up arrow var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.style.backgroundColor == "#ffee88" ) + if( li.style.backgroundColor == "#ffee88" ) { if( (i-1) >= 0){ var li_new = lis\[i-1\]; @@ -83,11 +83,11 @@ if(event.keyCode == 40){ //Down arrow var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.style.backgroundColor == "#ffee88" ) + if( li.style.backgroundColor == "#ffee88" ) { if( (i+1) < lis.length){ var li_new = lis\[i+1\]; @@ -113,11 +113,11 @@ var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.innerText.toLowerCase().indexOf(filter) == -1 ) + if( li.innerText.toLowerCase().indexOf(filter) == -1 ) { vars_ol.removeChild(li); i--; @@ -126,10 +126,10 @@ } } var lis_new = vars_ol.getElementsByTagName("li"); - for ( var j = 0; j < lis_new.length; ++j ) + for( var j = 0; j < lis_new.length; ++j ) { var li1 = lis\[j\]; - if (j == 0){ + if(j == 0){ li1.style.backgroundColor = "#ffee88"; }else{ li1.style.backgroundColor = "white"; @@ -293,18 +293,18 @@ body += "
      " var/list/names = list() - for (var/V in D.vars) + for(var/V in D.vars) names += V names = sortList(names) - for (var/V in names) + for(var/V in names) body += debug_variable(V, D.vars[V], 0, D) body += "
    " var/html = "" - if (title) + if(title) html += "[title]" html += {"