From b7d7dc12e31ec97c5bb8b602691021efb764b56a Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 16 Jul 2021 07:04:22 +0300 Subject: [PATCH 01/17] Fixes remote bellyrubs Also fixes the rest of the inverted view procs in the liquidbelly verbs --- code/modules/vore/eating/living_ch.dm | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 58f4c656e3..39edabb399 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -88,7 +88,7 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) var/mob/living/user = usr - var/mob/living/TG = input("Choose who to transfer from") as null| mob in view(user.loc,1) + var/mob/living/TG = input("Choose who to transfer from") as null| mob in view(1,user.loc) if(!TG) return FALSE if(TG.give_reagents == FALSE && user != TG) //User isnt forced to allow giving in prefs if they are the one doing it @@ -107,7 +107,7 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if("Cancel") return FALSE if("Vore belly") - var/mob/living/TR = input(user,"Choose who to transfer to","Select Target") as null|mob in view(user.loc,1) + var/mob/living/TR = input(user,"Choose who to transfer to","Select Target") as null|mob in view(1,user.loc) if(!TR) return FALSE if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user @@ -151,7 +151,7 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if("Stomach") - var/mob/living/TR = input(user,"Choose who to transfer to","Select Target") as null|mob in view(user.loc,1) + var/mob/living/TR = input(user,"Choose who to transfer to","Select Target") as null|mob in view(1,user.loc) if(!TR) return if(!Adjacent(TR) || !Adjacent(TG)) return //No long distance transfer @@ -179,7 +179,7 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if("Container") var/list/choices = list() - for(var/obj/item/weapon/reagent_containers/rc in view(user.loc,1)) + for(var/obj/item/weapon/reagent_containers/rc in view(1,user.loc)) choices += rc var/obj/item/weapon/reagent_containers/T = input(user,"Choose what to transfer to","Select Target") as null|anything in choices if(!T) @@ -220,15 +220,17 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if(soundfile) playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) -/mob/living/proc/vore_bellyrub(var/mob/living/T) +/mob/living/proc/vore_bellyrub(var/mob/living/T in view(1,src)) set name = "Give Bellyrubs" set category = "Abilities" set desc = "Provide bellyrubs to either yourself or another mob with a belly." if(!T) - T = input("Choose whose belly to rub") as null| mob in view(src.loc,1) + T = input("Choose whose belly to rub") as null| mob in view(1,src) if(!T) return FALSE + if(!T in view(1,src)) + return FALSE if(T.vore_selected) var/obj/belly/B = T.vore_selected if(istype(B)) @@ -236,4 +238,4 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) B.quick_cycle() return TRUE to_chat(src, "There is no suitable belly for rubs.") - return FALSE \ No newline at end of file + return FALSE From 5e56328007256be1fa9ccdeff091f5fcf08dfd15 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 16 Jul 2021 18:50:31 +0300 Subject: [PATCH 02/17] Fixes belly name stuff for liquidbellies and rubs No more rogue thes and wacky capitalization. --- code/modules/vore/eating/living_ch.dm | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 39edabb399..63f4d3e1b7 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -121,9 +121,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) return FALSE if(TG == user) - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into their [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into their [lowertext(TB.name)].") else - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into their [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their [lowertext(TB.name)].") add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB) @@ -138,13 +138,13 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if(!Adjacent(TR) || !Adjacent(TG)) return //No long distance transfer if(!TR.reagents.get_free_space()) - to_chat(user, "[TR]'s [TB] is full!") + to_chat(user, "[TR]'s [lowertext(TB.name)] is full!") return FALSE if(TG == user) - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [TR]'s [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [TR]'s [lowertext(TB.name)].") else - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]s [RTB] into [TR]'s [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]s [lowertext(RTB.name)] into [TR]'s [lowertext(TB.name)].") RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB) add_attack_logs(user,TR,"Transfered reagents from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks @@ -158,9 +158,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user if(TG == user) - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into their stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into their stomach.") else - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into their stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their stomach.") RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null) add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") @@ -170,9 +170,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) else if(TG == user) - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [TR]'s stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [TR]'s stomach.") else - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into [TR]'s stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into [TR]'s stomach.") RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null) add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") //Bonus for staff so they can see if people have abused transfer and done pref breaks @@ -188,9 +188,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) return //No long distance transfer if(TG == user) - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [T].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [T].") else - user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into [T].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into [T].") RTB.reagents.vore_trans_to_con(T, transfer_amount, 1, 0) add_attack_logs(user, T,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to a [T]") //Bonus for staff so they can see if people have abused transfer and done pref breaks @@ -201,13 +201,13 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) var/puddle_amount = round(amount_removed/5) if(puddle_amount == 0) - to_chat(user,"[RTB.reagent_name] dripples from the [RTB], not enough to form a puddle. ") + to_chat(user,"[RTB.reagent_name] dripples from the [lowertext(RTB.name)], not enough to form a puddle. ") return if(TG == user) - user.custom_emote_vr(1, "spills [RTB.reagent_name] from their [RTB] onto the floor!") + user.custom_emote_vr(1, "spills [RTB.reagent_name] from their [lowertext(RTB.name)] onto the floor!") else - user.custom_emote_vr(1, "spills [RTB.reagent_name] from [TG]'s [RTB] onto the floor!") + user.custom_emote_vr(1, "spills [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] onto the floor!") var/obj/effect/decal/cleanable/blood/reagent/puddle = new /obj/effect/decal/cleanable/blood/reagent(RTB.reagent_name, RTB.reagentcolor, RTB.reagentid, puddle_amount, user.ckey, TG.ckey) puddle.loc = TG.loc @@ -234,7 +234,7 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if(T.vore_selected) var/obj/belly/B = T.vore_selected if(istype(B)) - custom_emote_vr(1, "gives some rubs over [T]'s [B].") + custom_emote_vr(1, "gives some rubs over [T]'s [lowertext(B.name)].") B.quick_cycle() return TRUE to_chat(src, "There is no suitable belly for rubs.") From 2790ce12b00d36ccb7215f3535d3822c627a52af Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 16 Jul 2021 20:13:05 +0300 Subject: [PATCH 03/17] makes self rubs not repeat names --- code/modules/vore/eating/living_ch.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 63f4d3e1b7..ce9b7bd72d 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -234,7 +234,10 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if(T.vore_selected) var/obj/belly/B = T.vore_selected if(istype(B)) - custom_emote_vr(1, "gives some rubs over [T]'s [lowertext(B.name)].") + if(T == src) + custom_emote_vr(1, "rubs their [lowertext(B.name)].") + else + custom_emote_vr(1, "gives some rubs over [T]'s [lowertext(B.name)].") B.quick_cycle() return TRUE to_chat(src, "There is no suitable belly for rubs.") From b356027c5fe8e3e2f943a43ce4b55c7912b592bb Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 16 Jul 2021 13:23:52 -0400 Subject: [PATCH 04/17] Merge pull request #11106 from Verkister/fluff_s Updates fluff clothing to the new non_s format --- .../vore/fluffstuff/custom_clothes_vr.dm | 29 +++++++++--------- icons/vore/custom_clothes_tesh_vr.dmi | Bin 745 -> 743 bytes icons/vore/custom_clothes_vr.dmi | Bin 199404 -> 196720 bytes 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index df2f8764be..9955961f5d 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -139,7 +139,7 @@ icon_state = "joanasuna" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "joanasuna" + item_state = "joanasuna_mob" //eekasqueak:Serkii Miishy /obj/item/clothing/under/skirt/fluff/serkii @@ -150,7 +150,7 @@ icon_state = "serkiskirt" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "serkiskirt" + item_state = "serkiskirt_mob" //Unknown. Please check records from the forums. /obj/item/clothing/under/suit_jacket/female/fluff/miqote @@ -161,7 +161,7 @@ icon_state = "miqote" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "miqote" + item_state = "miqote_mob" //JoanRisu:Joan Risu /obj/item/clothing/under/fluff/nightgown @@ -172,7 +172,7 @@ icon_state = "joannightgown" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "joannightgown" + item_state = "joannightgown_mob" //Vorrarkul:Lucina Dakarim /obj/item/clothing/under/dress/fluff/lucinadress @@ -464,7 +464,7 @@ icon_state = "harmcaptain" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "harmcaptain" + item_state = "harmcaptain_mob" //Variant /obj/item/clothing/under/rank/captain/fluff/harmuniform/centcom name = "\improper CentCom administrator's uniform" @@ -484,7 +484,7 @@ icon_state = "tasaldsuit" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "tasaldsuit" + item_state = "tasaldsuit_mob" armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) // bwoincognito:Tasald Corlethian @@ -653,7 +653,7 @@ icon_state = "screesuit" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "screesuit" + item_state = "screesuit_mob" /obj/item/clothing/under/fluff/screesuit/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) if(..()) @@ -946,7 +946,7 @@ No. With a teleporter? Just *no*. - Hawk, YW name = "Earth Swimsuit" desc = "The suit of Subject 688,509,403. Made of an enviromentally safe elastic. Dry-clean not required." icon_state = "fluffearthenbreath" - item_state = "fluffearthenbreath" + item_state = "fluffearthenbreath_mob" //jacobdragon:Earthen Breath /obj/item/clothing/head/fluff/hairflowerpin @@ -1490,7 +1490,7 @@ Departamental Swimsuits, for general use icon = 'icons/vore/custom_clothes_vr.dmi' icon_state = "nanovest" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "nanovest" + item_state = "nanovest_mob" //General use /obj/item/clothing/suit/storage/fluff/loincloth @@ -1501,7 +1501,7 @@ Departamental Swimsuits, for general use icon_state = "loincloth" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "loincloth" + item_state = "loincloth_mob" //BeyondMyLife: Ne'tra Ky'ram /obj/item/clothing/suit/storage/hooded/wintercoat/kilanocoat @@ -1559,7 +1559,7 @@ Departamental Swimsuits, for general use icon = 'icons/vore/custom_clothes_vr.dmi' icon_override = 'icons/vore/custom_clothes_vr.dmi' icon_state = "kilanosuit" - item_state = "kilanosuit" + item_state = "kilanosuit_mob" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 @@ -1656,7 +1656,7 @@ Departamental Swimsuits, for general use name = "purple and silver dress uniform" desc = "A royal purple dress, replicating the usual captains dress, made of the same glossy/silky material, with odd oriental and foriegn patterns on it, silver lined too!" icon_state = "kilanosuit_p" - item_state = "kilanosuit_p" + item_state = "kilanosuit_p_mob" //Mewchild: Phi Vietsi /obj/item/clothing/gloves/ring/seal/signet/fluff/phi @@ -1843,8 +1843,8 @@ Departamental Swimsuits, for general use icon_override = 'icons/vore/custom_clothes_vr.dmi' icon_state = "blackutility_med" - worn_state = "blackutility_med" - item_state = "blackutility_med" + worn_state = "blackutility_med_mob" + item_state = "blackutility_med_mob" rolled_down = 0 rolled_sleeves = 0 @@ -1903,6 +1903,7 @@ Departamental Swimsuits, for general use body_parts_covered = UPPER_TORSO|LOWER_TORSO icon = 'icons/vore/custom_clothes_vr.dmi' icon_state = "latex_clothes" + item_state = "latex_clothes_mob" item_icons = null default_worn_icon = 'icons/vore/custom_clothes_vr.dmi' color = COLOR_NAVY diff --git a/icons/vore/custom_clothes_tesh_vr.dmi b/icons/vore/custom_clothes_tesh_vr.dmi index 95f68191304e6f356ca112d6cc76d1598cdfb77f..53d1abe197157fb8f789f409bf8aef738a0f5b06 100644 GIT binary patch delta 53 zcmV-50LuUA1?L5j+yQWr-BctgadD<(78Qdub8)5>CFZ7r*oIun3a)-GVB-Ns_8nvq LI}}c{R{@d%Y*ZDT delta 55 zcmV-70LcI61?dHl+yQct-Bc#U7b|gbreqcsgS2yTrWGaTrh?dpT*?ZrelB1O0FKoj NHbzf;m$Ov?k^!ij7Z(5k diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index 595ce2da40c6849a2fadad9d2382fd64075aa7fb..6c8267333ad745258a99755e84699fe73ca48152 100644 GIT binary patch literal 196720 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 literal 199404 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

naKJ%BIlVrGE~9EiV*=et$4>;AWl?- zy*V&q6DatA(J`e59ol8PloaxK?(+W228-yVPDvRAN(eK6hCqNZ?<<@Lx-UgH)$ZNk zJ(O6~WGk(Bc14#~X9jHrNi(|)z5y@ETvq$rnj-9~_7XU?Xdkk!@vcBRd5Kk$3+s%{ zOoG#}!2*-E&488tYqdEYRXArR5}Ni1*V~y#y6_ zA(2R0`hgZ;I+*;V$D*!_;mn%_wz|GDyc~pO42n2%;u@jB_O=E~jgMIO>Y1P2y;K=F z-9LO5;-ZP0@tmn+%EMwl^vvTLYeX0ZS`qnf-@vop&Q8>N9;HbK^m@QJrr{qC;>YUu zn;C?a?uQk&X|R?@`;1l*sdp>({bU7E01|dZK(6*@<8I*{t|jjhqT%%mFxE9{b7alu zl^;)jsunn&EU^Y7JgodlxGRu~idP`pvKEb{OzE|vQB+i{^i#48%dP=Yce@SbHju4I zx1k{g9(Zv;?%wvBDKd32u+aV<433?_&n<>4q8CGG>!rhU-h6H{(AZSW4vZ8FMga3u zNQ&BWW1B`wi zSTjg`%dx4goHmJ7^hGMQlt(qT$U~x_e&a|m@P0w*eIZfs97iZz8`K^Buzr$4bIh$6 z|Nf1IN?26*gduWWvyCuIc*eoS&SdBP)^xIDamd)fq#ya7wT^W|7);88R*P2uGXXg@ zm?_3as1&gLkhG4`WWuo|lf5u@W4(_+xxe$Qr76!?yC$pgi1Oa57X5bO#8pyssMXuA z@$D`Rk59$;SG&f5pav&ip=FD3MX{C$mkTnHf;}pR9aq{xW|dQW8Xz4rB)SM5tPiJ$ z4F^V#E)o&U&gr;WU|Vgl2m$B5pM4Gjx7uAc$c9Af(6s;iJn~_J8p=jA+#$Z!Hq^Zy~>fn-+k_leC@-1`C z0`aeb>}N6E1D#Ghb#G40%;v%xpFp_ z;(fHQ6l5*!joH@D*H1hp#Kg`A(iFm~nQ@ZsQSvQm!%?#0qT8s2jR13XWL`SG1i{ic z+C|WF^R80lK54+jAto2OWV~n>3;H{_>C*yOGK_H1G6vL{GY&^gi#HMoPE-9pj+c%p4tl+&UdvGCgiZJmJXJkpq7HDbU-R7XkzzX8`U`#1C$aV;wmHf=1PIjK&EGi48yDphY#@aNP*43WadgDsk{Ng zFJN_S#&zbxkbV(YS>l%iBq4;_Iu>FxEWmJpqgc>}Bb=fpf5Y?s`bW95-OlH6di2{6 zPKv@&Kk`Rh?;L*|K;eIVDgesmwa4a&$kS4-Nqjm6Nc+!7jn9L?xiCDh#3+7sYYmhcTl{PUs zb`s+sC;1-X8~&N}&)YQK+{lj_KhGqNw1z>tOMdaDe4ppPP9V-e)J}Ssr>o0$>xe(u zRMz4URE!Pdye%yjiRD)?)t34~QlfmMI_!iOX=#e*xU$C=o0|L)8iMtBuV{;)9^W_r z-jQpVCW}SRxu3b4b`G(E`c2xE$cB6oh9exrY{cKl>yu74;=7d0MFXwi_{_&_Is1;K zK{x_%0!$~C{81&U`PyJtP5n5)9T0jq6er!g`!1=y;C;WQoJKwi7 zkS@O8)k&h8LeaWyJbMZ~Zqld$0R-d6IjdHK(mgL7pIMuApyp1%?VC{T$87J$gf>2< zMZ}2NZwO`F*?joXvkqb0T{>($KCi+@PupqUY^q>e<77aW1u+?PM(*vI3f%P?KmFUx z0!hgf8>IUaPj%F!`YRekzWEFJBqre#PYrxPF$1GFnnz}yl(rC+ckzS=h@VM0vsp|I zJDvPH=$lB6khMWT{7R#VCB+-v#ORvL^YYVm7|e4sNHd=LeyT=4n^Z;GL)x_Pv{1gN z4zb<)rY7x&=mZk-fEzJd>ppRq$9GX-a)YsnMsiJtqGT_Wi|w;!W_iD$Z!cn>h&D4S zgb_bLCDoo;YZnwy^88#`Vi{{YS)x6KyM>o#iq)z09`OhJwb_LWh3-HXTW1Oaw4VNV z2AhUTXG#s}1{Ot8Kp#x*#L6$Ov;JYY#r?$-0yw?KUicEz+IBgJ?4m_*zB{=Q#5?Hu z8WB$)TwaKh!(uUJRQaObr5YTTWdBk6`ys{%Fp=u91$yQUw)m7je01vDi1IfG3J}+x zl5YCV{0X?HX0&XQ5ArA=LCXEnY}!fB6gQlFJ9k zOU|w{)Rz0TE+gz42X9lB+hDTTZkXA5{@93ibV2C?Um9G|@X z7NoxyrVEX%9%ojK4cZumT){Oq{gs91sJzw&t_Y{E*259CeC-J4@s;;+*Q*s#`z?@0 z|Kt*-&QG6utx4%K?KO@C-MfvYFsFPL<`{00?2)Wfkn{Bx z+`dF7=D`f@7_WO?=RGkqM?@#KbWya#8jYSl^UpBR5a>%zbbNn~_8!49;ukG5cW(Py zw*@aIwwO+#BmgI7(r=exC#S{1BUfk6ocC&8_Nu)ZSW&Xwn@f7c4>=GA$Jj9tRymhD3ZP~DVUM{Ie5~Qfw6+pRx}u5l!k5r>iPN`$EHqpnP>QX zx=^O+OK#~4h?@9#Xjo^DQVB7zK2YU5)O?@@|9<*C&tu;px}rL2CI$kHHq*GVl)N7C zjr9NzmEH#r!$x?hZ)J*vkj>a>X>8o@asUsQ!0=g(--reITu!>^c7%9j@A9!k;X!b>;f+|;(w6+J8ydVEUta>hgkA+}x7 zK2?X0Re0jAO`TL>ja2K1tuUbmGG^y5ZOtn*23wJc(&+(gPn_hE=&NmK8q?>f>1T6` zo?N2pS_ht4d2b1W%(5iDrw-PSSY;?jiT;LFMG%jUL5wZA{YmBPJkCb!ASwzY6}e^Y zZM)tI1j@A9-qaT~AC|w@sdYQn7|-NQ*d$ejlbEMbM?<$sA?M=44MnMd>^;x_s1%Wm z`U4T0IbiPH4usXW0kWgf($b1JJJ)^iik4AQI;al6@G6{$fhROW*-Zvd7h5#*BOr%} z<*B@|L~37t@^9K-B03+omvN)^_2}QS_eBo%T?oJ-VOcAc1|H?aWQFzi@9UfvwetS{ zk~uB-oI0&IGIV$A8iSPv6MWvo1k!USpOXdl<~j(PAh#tdi3*>NNqU|cyrc{3= zOUT)b6-pKzE^<-1ql1`#%H8xCY8aLSlQB>hj--m;UymX3CazNEOCxOr_I}Z<0CxW=!{F65YlztQ_Sn%4?lAA?O_xSinNs>W zn(7cInLJ@&{&AmZD|gzvf!X7*1=~yK_qCn59A=wS6&Z#HVBDFt0jy@RBrn`Z-1pcSCMJ6~go_o}{waGh-^z^%kIp7;O6);io z$`D9~9VyC(&mIYcN&+PMXSbN-AqFMvmnb_BAcF>UuBLu1$-ME+b%T>Y_7&5q7Jgl9 z+TA(PolijBEPcuei_ZG~$dX7cyQDlwEZPW$&gk7ETl_pAmd~ROpx9jxP1NXUvRI8A z*Un)k$4<1b%t|L23*?PQr=kz|3#g}WtKt@TsT8-)K>arQ2r z0MmMk6zM`^$JI^}DmGY$IU!Ch{?NHK&(N|>5{_>La^W|`~iFORAMC{L(6>v(v0 z7$2jt{pmcl}!@_b`8NW$&C4@N zVrd2OfpiVoowg^s3?5GH?MSZsnQqMr@ubfMw{$n+0z^%CeQ7GqK}OZa zM>k3^_Z_V35la3z`&~yrc=?nPSY;i+%~HYT2XMcmQIVYQRu_jt4K&nsPzvH~#3c~+ zIv$BWPJn6gP$4kgUlokk;PFsj=HcNN7jg0QdbZE~d(M1mrmGEv{o3SHn2bjI+b+9< zJSf>(F^o;TnP78aVh?}3C7**Xb~!KFuhif+piN?omGDRWdWg7~QxB4y#+%7Lo~r9o z!uH|7u=J-6?)KT5!23?{Qk1!vBZfuUer+E^{1w#O)8yfCd<8+6d=p27B05r7H_CI? z;EP)9^Kf(801W8J7WaxMO*eMNu@AxV(uKkNfB0bHq(+YnZeE=?HV`v>ju`sE3=AoOEWUdrUaPs7Ee zxBP0t#=5&ccKz-=QjZZFbk4fyzkh3EV{JC#hiNVps}Ko1C-^$v$e;`KeAAImatP=i zfA|uP13QqCRBX3r!_m?%OKW99RETR3u7_=&l2|0wc%r8oU!3!3QHjXm>p|E%P!UM3 zFgoL#OlSCX@TDAV=jD<$L!F{12VaWIp_!sAsZ| zZ~M-PgT2qYNRUG~ZXJ=4kz=|1v3y$VpLT(BbDhr~Fz;w@$pl|On7#I`PF5Pwr=IqW zGLE~92LwPWC_++fY%7^nTf;t}T>V<(?1@|d17-}9#VR+go6*^LV4Z;9LV$u)GRM$d zhuOa}g?2h#pgErJ&v<;_j`vX)*_*2iU32s23yBC2Ksg_juVm%`0udd$kX|0h&x+Qu zoY?bpOh&+#0-KVK%QKq;%Kf*$1Cfp`!~kkY`h1@pxzF<&2DDI!IOhHwq77K?#DrpM zq6nSA#mgA%(aG|quRqv5v?z`1`xx*%9BX-h58+wWWfL>V8UZ$eJ&07|w*LQsa03>K zG0RDMeX5fw3sMUIXsn}Tifd|f+5?Dut=;p)c}y?B5oEM3%-hOq4}F-}`_JnSPQ)(C z)z!stN1D^@z{?A9AYu+AiAv>lp#~fvs%?KsfkM73<0C17Kow`$tr@8QiYrFspv`N8 z&4}CWP^s58( z?S;4}4~Oyb(BNSHpI+I_drm}v7%L+u2kSQ>+RR7#_3Kw!CZ@qYJS9r^?sbsFtOHET z%iFiLVG$@I*3PiSU8Wr`(lG~dis5g!tr^h5zvW;4WK0F!V%4YbF7xfPnTu@ zP(p0UgP_AbrMCLGm^r4oy-G*_#RB{t{7u5r!p_2ty~dox2q6KfeJ!fy2vSv7{A2@* z>D%_$x*gjCO&z&J<2nQ0F?J^2E)_vxc(eH>9By`4r>YpydX>Kl$O1-&rC!_+Fvnp~9(v`aBD&7c! zJQ!BDYr=mU!7n`NE^+5LP8^5E8UGfw7vKy{gplYsnMvE)A8Dky@7n3no9WRPVQwPd zf{^L+1WN+GT`utkp7yDm%WCG<3I3voGu{is`ki#7>bm{m2UDiRN=2!sslvNRDJo=Y z!O*=JbVKdvPn#T=>ujq6c%+cJavZvR zz2hz*WK-N*{k81F6GDt5fPe(=S+|tp-lB=<<2stt-Jv>;xiriiFQ!(gqa&Fjf1iT{ z6DE8~5#YIop)G%d{9}L{3HgWma-H0n+w^(kN^fdmab2=E4gr|emy?!FD`iCTOV*cq z_EZe9z-N##PS}WDK*~cY?pc2rCBAC#Uf%A-M6Vd25e_jYL}=rG6J&eNuXhAA#}k8C zW{BS%^YBpIEMtWKsN~EHhq;jnjQb}9Q43n>C1o8ae=*ozzZK-HJmREVYCnG7n~>qW zbIZ+spa+bRkW8=%5lJMQG3p#F4uT5s=@S3_*1rxAQTUJM68`t~!`8S@P0&=}g@Bh; z{bB9XzTo+fpq3KuvLyYV8eTnXvqXy~u$Y`OQ5(<)#Z>rdD@zZ&$Ui@6ajaS#{tsbq z0aeu(y^C(TOOTK_fRqT*-7QFoq*9X7-QB2!bW12GAqoi6AuV0f-Q6AMt>f?h@4Iij zH^yTy*s$4W@3rQdbFOcGYwbB}T|QC~1X5o3`?0)l5@Bzr^3@2TWne&EAIR=}Xc|vQ zRDcZG&Yj(d0^69R$f9zgbyo#B6=AXU?!$@t-Ny`!jC7A5Z;$m}jNc!|W+VkU)vtJ6|1D+xP;IAOlTnNjy@D*!ah1yr+{JO4U+%f> zU<|iCKgesJ&_xv-j*U+IPQ5;t{f(yQbDf}`P^~1P-=c9QNoZmPPFRI>>PkI{!{n1A z_yPr6bC!+elrxpYX7i6Gf4(N$V1e^a$(SdEve~0zP&3)TPx!IpYM=yXk`1QhH`rj4y5`M*E=-?oy zWjlpEnpFggR3JKtN1BTiAS;WFT5QAuV~PW+xy6%03{0rq{_lN-n@5SIBf1+5I~2G`{m_M`F&nxTsX-D<3%bcfN`F z?sEKodFFcx8zVC$qO)|bcG$MRIM1Xb>3tOXVI`D^OTgH1`=!O?6#Ath7QNuz1 zc_P1V&t0KU)m#xhc!o*R^7qgw*#nGH3zG?ub9g-ard91_dIw=b%Mj0`ysh66+D+?E zT#GIo_7^h)H)0_~_7AHX#o9tYwEF5E?^#m``9VT>lsVIJ8wWkRGc{i(BR40XZivIW zWjbFUK7KZP)t(7B0G7m3*}q#VB_xPl6f;??3-&0%sd!pi;vFBuvg)gTZSCDlT3(g;X9d~hJrqRec-A$0AgZx7Vf(;tKukizXj(%_0g*qe zKG#Smd~c+O4akJvMjJ8YUZhl!bIJEjJOEP>j@{CHhSx(F@Y@7U&|wn5eSioY_*tEq zH~dys>0hsRao1!lf6q64*-8J6Bu;UVU~WPV?MAoEp*k_5>-1vKNk9B8j&H1?xsSKEdYMj82{+c4@BSnpBap8}7Z>M_GRj>)$urA^zfE_Y zht3>$qaVdMN0~8kC~+LWt~-KQbpgasP$#1n$5KHu-9)U7gaVD3xS$>fBg3&2Mduhy zy#uLlQTv6ot@xcM%Q0A3Pm8SI94x>%@SAV##ky&orwY<C@0V2(jQGn{LzC!%HM`PoOU9gwC5wp#Obnq5i9=tvLs0c|acczGeUBwhcak?HV(F%R* z7w)>^jpC7*d(m#=ql3I-if6G$Kqtd{{bKOfrVip1Tz|OP|4ba=h`c1EYQ8VY5W4_b zsbB{3(1R0UuQ6qL;b1@ATxd=Q3WASfA$fFgOdz@CU5e?sb)}={VfN4!JrZeQf1jfm zi_3KPeMwVOlM3$M%A5Xn(w@jgNy2oZ-^p2}gd6)P?Wf)sXX?;Gfj(jA2&c95t-7VX zqc+CxZ|W$)(pDHqb4nTKDitsbD)tm?joaHzlKwZe19xJX0rJYe>=AmIJ)7~CMqVKE z1tu!=A69QCqkGu%2%#;x>TN4EYC1cO)x6*$!k& zd9c4XUzguoBaTNMbmhVzE$I=%!?Wk|A!tfT1 ze7vru0vh^e&{0HTEbLlGm;CV_W`T80pi0icCc5{A+g9xTZ&6&-j{Vc;N2j=&WLh zVZf{=)7Iz&$ut3tNKDgNC0E|mFM8Tq91;EuB~l#Rtyrf0<%aFhg|Ud_S#<}qgtdpV zWO?jUL0@_11DCwT(oeN+s(^Do?CBbPpDr@igZ6^cfBPw}i3}blc78OK&oZ_Ah$e>0 z3u=oPSS%zV(Mu&kW0p3$)(Vz&d+&=m$`SY;iSx+;@bfJQ7s}~QGoiA6< z$lO$ZLZyM_{@(yc4;)p=Q2tC3C7oaa3T+3Ipa;|D+>*-SiXL1gx7G%W3 zhQFvC>d(q)pkl9~M>*)IVZ%r>v!qI@BP~Qq^SDfZqtPM@HzohMWI6nqq&<$$WsS8- zmBZoVQ-?ZQT1Z-Z1A&g?eBPkr)g+8=JKJ@ zo3t~HJW}t~HU7H*aqIk^p`kqzlLe(SInc67(We=zNBZ>o9IBs}q!Eic|J(`UFq}_Y zNjXCuQS7SysfB_Uc&Y!|^zV>Xqow@eOcJQ$f3}P`xC#lsM;fFs`GA9P7ytW4`8~rF z)>5wbiG!;aKmXt7l~TfR@7is96rFJS{?Ers=RU>H3P!Ba{qH--IRj?z|9L{6n^yQm zZd75$_z&l{hbjGiPt(E_Is|CUUsx>0m40;?Xsa+PCm!(cF6jOJ@KMD^ zl)(Sd-uuF~k_gWFv9CKbV%R+T^m;$=vud=R0N_;85Hs<>uARHO@zY|O57GjDjSBRB zPAB=7QO$H{YP}0e-F}so^6iw>a$SJ)$z!O8ZrF=%{Xz55UN+Tjk^k<`!)yDD4&}L; zmR*VS|GHxD#{}M-E4W*>i*i)=0%Wi|p_H2R@2P zxqb<_sp1R&D8@Km%1d&L;(P5vTT@Mawhmk9jZl&)n*p*9&;`P(7j)*Xu<18hLs0x$ z#rN*TraCE>sgYgcRiU>z*blZC8Oi3)oWrPv z`c=SUjP~p&3?}>OZq=EpgsejqejJFWvD>1X+bx!6G&E->UU}|E=I;GL;yQd~WN7A% zsOfS2b~D2X_6AmAIUz!ZMVhQ;JC`uTzdi+gI>hBZyCKkIO)|SeJ(K7AV?#cZl^P=w z&bDy6%1ajv-|4(J3;t@JeY?r>{dM!)*W|~j*sIA41ldT7Uv-K})fTJSu326@ z_#1TSkbJ&32=Al5k`5i0e0MxNC2o~%3=}*r#xlmx%+fcZub}seGB~~?H*bN=^RKnz zrwxpm^EJ^k`5}UXlCd0c7L_qt=1)n}>kfg*9UcV^jfcU`&t#OLnu*h~;+t*jknS}K zs8mZoMKj+2&xw0qJ})4co&c!Ok!$Co~iYV44vUo2c{R38FOBn zf~%{laInMZn|o%F)P=*%X?LoE0)QR6rMTNXbuygsD}6-rr?2~VyeaUPy@v-mNnC2R z9rHHzD2BhkI15Lwl-yq=Sy53K4Go*}DjFu9Rp6uop83A6tSrxHrImE4(f1S|r2r|RY9gO3wSsVl&KSYWhec*mU~=OR#& z5l7qIyx&?se@@bv5E|jjv^0GDjL!EPxsV37A|weqOE_QC8yzvXI-F%`q#yRu9UC%s zzj9Z^nAxnb+`*#2rV?tvh<+iFjS4wA4dZ$zH{FnkPuIGPKm@@C8Zv2NxaG zPpEt8E(FoiJ(0Dw`Uu1kqLlwTjAxR+=fz%+r16{2X0@RXO|OEi66TSte|B}R_baLy z!RAoo5`Y{P)Qqx8%Y19rwSLTZKfn$p78QP` z7>X9+Q1kKOFE#YQee3hddUVdskccme!WaIBlr{@DxasNynO9tb+D2nPIet1u8jZmNiObru|##OzI z;i1zGNYKzHvowK`8>!e4jz_sb)Q0z`%W`cXl}=GVv9$97&t@Vr5;JOkq5i=2Rh83y z6J99hi}A`zieg@!<(+fE#*yB}sW)o4yh-y1**mG;i1aC?ozyzn@+PSr51N}sF`J)I zAO-9Y>4MkydaPV|AiC19@w2K0M#O=RHAW=I_V5UxsI5?HyINayi9h$A3ck4>! zCSF3=_w3lFEUP}+59#}cdQY~=)O;EyH<`^wva=ffj)07Kpd50cduz*`j6<6=q_`>u z)Hxb-*IlZfZaPc5O%3=kn9{(n^pb{GRKy3ut zvwJ$0i;V*7L&9X-l2K?7*mEznm7L68{o9;tafmPpWJ`Fu|A1{%ZxQg^*%YxG*B?uMfi9fus;HnKtbq>+bP ziW$ghCemj%_1^K>{!%}YCdj#fB_%R> zq^137XrW(Zzm22mCYZciKfo@@79p8ngdJ{uI@MX77Od^Aw`+9f``*q{yvp2 zqfH$m1z6qzGR1m?Cv$J#V!M5`X}{0QR(IGo(IS7jDc~9uaBeE*_HTV~b~f!0Vfei> zz&)y*;sU2;$TK{<;NW_{N#0?@^b0?|pvQZcLcLXE-; za|ia=wzhR=2qM7Wh+fB#VA-m<;5_#^yT;K!>u!w3^0cd|oMlS88`J8Cqu3Zaye_3S ztS^5?B_cPotp)(cD#7m?6`W~T9dnr}pOb7PIakAL;cT?PAA?T`5n7S2Q^R5AAa+k7 z;EW~DaX#aC!a~jH4ex_DBRr{Xaut)+;!X!@slhuaFnT5?bdc@)Db=}Xk+b_lxRQAJ zcmdDziWhp7FY#gv9{4-%v3|yTqdqJM1$wB%Yy$-2(!gx>%E$=~Qjc?k(rbmEzD5=t z=IB#W0AlLOm2jF?b-(OUdwp3OkW0S}HQh`^WY?aa`;8t4EW(-58KY6&KJQ)n#DKCS zAtHa+v!jB!XmE~j5Fn{tTObrD5My2r8yqJq zdD9g5|4iSdCLJ@WNnDfpTd2ujCUGw84iUojB{Goafxs+}`36C#)RRKTBKtjyg#fzyb(oY0Fn{Mo&D zbH2}hqDEsBQK!&2Bb{x_5iV}LD_`!p#$rRIhp|BPS=J@2vg?b!Md+X_Ef<)Omt+0< z{+fRMUQPcFE3VcYg_4jEx-LO!21)q7+$2PW{`sS1CMsscO&namXT2t)!?3N%D&j`3 z?ifV5z%DcqYjl1#@$Bi&03N=_Zi0p6o;}#`X2yxD%a{M)MkLq_`XF_l*ZM+TTRS}E zUO@cL1a%g?^}P;v8|vjJ!+@7yHrxE%JOA^;?&>nyQMLB=P(j22k6mASj(X-H5V5VT zE8C5?V+RW4>9HRkIoMc#sXp(B;x86Bv7sye0(_dqa5hQ3P!sduxWmt(-&BQ(nD+r5 zkfl>)33>SN_6T6MP81|4D=V=!0hDk~@v=vG8@6 zJ$66@1;kCJFFn`stV`dx0maA>=|Wnd{q?&Wm|nJIZ$#qh?T7M4mA)SGJCL4bFO@(1iY4Wg)Y>y= z&ic5N9)v7?9~;$KlQw4S1fZOboghP}PeU`kIe@df<7x0Y57#J^t@y%$94!4@&*^?d zO2hOb($rB(c5rrf>_3q4`iW@p92eG8|J8>lF^Yk}F}pU||C;O{7{KT;@-O-{T;KSK z|8wZzfrOAgJ_Osnn>F{No0IbU;k>G(-vbXaBBi7Vje7wn1IBTHzlE}&BOael$UxjG z@|ED`#+TE13r^3^9cdK64#z0buek?4Dm#LUiTP$|DQWO!i%f%IY+xWXw3OqjQm&d` z4t%zdkPt#}&{x%#3*o!0oKk^y1#mU5XARgWDFy7`xzIZk@E*08co*w z_wL<8c%CTlV;U0uAL)e7gfuiUy=W;2Gsw)OVqjp9%-0aQ6fbBX*eTsk!R_o;#s2Uu3#EcxT-oG zR5u+cJRD1IKg-+=Tx{eb4}*|45c7+NbSDIs+I#9IuA`$IxP2-rTRSpL!e z^gpMaa8LMvis`m6RDhKKb3^CPRjH~b5mu-*&!_g9lO;eB?AvLn^AQ*om}y><$<96U z#xtC*qDUII`EfaD3543B)(J@>B>G_r4~VmFgp|906~*^{9~Ag5*yti16Iv*K6JGcy zaMlWk;z(|A3^{Sn9%bt(Tt1EuMJg2u;o7^WKZIjo7`IW&5Iy)^N$Cr3RV!QROVT}B zQ_@`B>9`$Xq7@NP(^R3GtnsQ2m_h|7*WBje2QMJWH%}Q5NNKTU$$}cxW2XYypbfIU zT(?M`n*!DBnq8NRsL5sql21$|VH27ls5^6-{&0oy=+UEky}FG9lIP`wk>Wuc#GxTz zKMB-bPP+rL&@IwzUmtQk%a=RLN=RtkR#McdzOyT~2KxogOz#T9c0Nla8UMM(z41lL zL9IA(3F24H*L9Rg;g<0J?Ok#yS%<>C)@QFJq{Fvl)FJajI(M!eqm|K zD8S)2c5&BhW3*m&cxac+qmnDw+8AvSomOXQQp63RH8~C#D)|dRJF2f({><)&GudYY z(E``p(tvC?6-eW~&&XmD|J=X;2Oj!Jvfo}mIC=h~uOZuQpiYE?(EscO$Wced_eV{F z-=g;6@gaP0I;AxP1%<$noSV=~BfoGkJQ1d13|Go9Kep^$crU@t_2}ZT=N2L0oT`aK zRsB$Mab@LqDh9X^e_6X+#IwA4!&;?R^6z*Z+i#y78lcU|gDGx_(fA%`!2a=#yBDPd zsv}k%xdz0Uq~hD0&cyNVt{Qg@*nI^fBcr5jkKHpRCCG7?yh8Qur+qdWjhzD=1LXKL zf*M<>M@XpNGtsQc#fy^T_1)Y$s5ttzw^tdGl$J)Gqw&Fd!ECsM!~0GS48&+)j=J!p zCIhoLUyKmFM@`7k8S;hlDc9(l&%t-2%CAL-sL;hV|6<|d-@odgm`gfaW{-pHUd<5k zuaXwT3YWH*2YzhC+@OefobD?iE4#^hapn1tmx1b1ZYCvbj|Puc@z7~#k@Na(iaWL= zwZNz~pa115nGL1-PL&mk_hFYMznx^|CI$G}{+FzDotxGj8H%bg`osy({CXv=gq!61 z&gu1Qx_)5W`~%jMb>L#MiG%SOveh^o7ym&yNfaZ&O!^G}EQB>9BN*gwM{f|v*iV@aDI^Y9 z8o;tAQyZW$M9Dmqw3e(lawljUj7vSqqdx8{ZQ^|L=sWz%X@nwYcU;0s7rkPk8NZ7C z$`ujQJ>oQIF}8pHwNGsenISZ+fQi)|&~Qm!=RH)kj90QqdIi%RmbT|*vRM-t};ZWy1fBNVa4l9Q6?mNzeZ7uz3GG#EO# zsDA$ZDi&A%Ywq~Aljorl6Zju47p$!W1@V`~ZS`hU#kLwvOli~Yy8aOJenPl8=d8Ec zL_PEOy3;P>(EaHmHNeg$s&<6`JSQ)8k;5YVf*u^=v?8$QvqF7K@usv~AH9tz9_jT0 zH*J+&P#&|TXbHRwBInmk_WX2ri&cDk%!BKdtg+o5{fyc_*Wcd)38GcK%zpLTc9X?K zKV-bI-*S0*nL3?7nsqxX)^5(5Atw7BK&D={HrKi8_VU0@<0hAq>pc5TTdGEdD=)Tm z)wT%Gd~oX(0EVo=8I-a^#~@Ue{D7TwU#EsY$ASQ4xs~~*y=+Y(&`wLwlm>H5;Licb zsOl#YW4434UQ<~vIv=uM9z`-QWxn1fNUTscbgsqQs^zBucmhxwSQjT`&Ykkaa$xDA z6yDlZ2*-iGKDyH674xy~r7Lxs#B zd&5~?mg3{hfSBi_!!M*w9wr+i!}dKwarg4#5)w=+L=huLYlnv&d|M`5d#528v%6ci za^+x*w0D)@w#z5>27z+Yg#1Y+nlOgwaO3xX+}Rry+sP7}$`hM*fVisP5xTI1QeCaT zf1M<_Ea;qI$qMfi5bJ2Hc6vlPnfm9ROmiBSS=!^z`L>C&;FfPI!x}oe zMCi^qlr8rDKz_@2l6S?vxf#J=Rt^mfrDbGnXCjue29U6E zP^FAZ68wz&j3VnJ_**OX+4N0{(~4061(n3#F7%PTR#pQbE$n1OCKg=8!ZWMO-jj`sw9Tj79GG`{`nC(^g?v|(J|>?FIX zy<(ZhHIA~jeR5K8ug(C{e1h{yfdIj2F-C__ASeP?ltE1=G;s4sr@h^7!-^n8h`WoH z^NQE9c2q}SN?k)@gFTFe&&`dWDLS=;Jn4766I%kB;HTI9wl)Y1X=bVn&N@H4+t07g z-g!SW>*0*?QPfg|1(yYF#o;~SwJr4MUz|g+5ns1AN!CIZMk2EPn`W`bgETg=`uIvj zM11iGtN|g`lE$jRdR`kQ9=hckf-=#26dkeuU9_Wrc%a>~DE818wylXF^u@TE(!>>$ z=p&BD!!bVHvoX1WU-W|M7G6gLTm#`>-AG=NQ#I%;+ zsW{a*9gjaAmB{a-Znj>|Ng|8ejglCD4EkfOr}C7+LyEtzCdpIdh!o7)oKmZQto^`k z3#rbGhNUbspiH+gT45Qds}?D1`bTmTe%yzRsjY6Rx(zFCZQ^HL3xC<%E86mw&=SD% z+jrUbYrIHbgo~c~D7z?ktbXVCw0qL&>3?YVaLu2vyCstuW6ahXEQd5 z-yFz1#B?gf;c4{3a5ea4&Lp}&SsBHFBD~%mG1*3WH-#IjoFzmy%Pi5>{+^7>X+}%` z;>d=#;h?B|WgH&C_`b0#Gd{@{lob~Qr6~$xVFb_`D|zayc`^HI@cEZI;0uop-kb;WQ8yHj_JEf}$&-2ei}EP^ z2oy-!@2(n&9TP@VSj{R8 zRgntN%0V1GI+Xs`CZJJ;AM_ImGnf|BMEzhvhRvKDl}rDL?`7qs_tXldUj0++%l~N+VkwMQMqFiZKgJmNG5$SF1pUYFdo2SB5^5o6HJ(y z9|qA%K#3)1Um#Q|LR6yrWj9Ml<0(k81A$$ccPgR{U&5YKpuZ-&HRqW~+T#dZ^_@8@tBK`6xr*lM;LhPzBC@YveF8ef+qkjEo1A%b@z7-+lxaDT^I&cy5>{oZ zzcJ|@#j@ZTd{4$paQ_MX&>XI)5{ zcA`4Xv1z|L6*5F_?{jAMzeARg#Sk=%EEeajgx+F`N19q$zs)w}p3K&6p#_6rvh==! zOug|k;xz@~YDPdLN5A3IlR-@B2Uan-2U?GWE1|};OBIMS1!=WdHA;ko8SnCjIihde z$koH-_h(JthkPgqYka?_+Oup%j}EiwO(h~zi38P77na)Jud%YA#`Vtd`FvR_?EYOU ze4=-{(8u%aM=}1vsF~t665W;y207=)jF+?qMzW)})<`t)katFKI&pK%Or02Vr17q6 zy7zI$@a@ih&5Kj#tU8N*&1&{iSknuN5^-}$LLmQJdJBoj77W%_T6vVp*c8@zJvf}( zi9)?u7kv~+$x?w5qMZPf<@&-1{PT(goCGDX=_J(VCf^eG&U#1dRmyCX{B^NNQhoNF z!`UITlsOPw)f`M2 zXn#u#@G7pa?-mJDOx?TUS+b#np7EtMi1+4*k8%GCJR>?y7zq|&VrG2MNDjoV%kE`W z$!k%*#jG*%&hv?s_1FrxZN>`YQ*+54$9td^$p}@Qb)SZBRGe7+v}|OseAW{%;+!cv z{Nby)6?&DeUi|ILc{75BAC?<2i#&+f3&Z9%^&-Jq4<`CJ+)O;J>>ZB9B)+=J1Z zBVT0jPO}Bwwlrrt5CeltfcNOiygwj^K=iI{u z{^R$`rWkuc2-n0yh;9ts$B1B}w#uk6?i>i=M3%~M-{hUj0dMZm*f>R=?R)$Fs!=2LUCY>ZWKL`{ibk*3`+^)6rja=a?)dJW zvv~2{OmlDxEhIV4`xPG}Qi6!kWS0F+&6$BZ8pQicP06iuTvo9BJ|hR3aO&@{&F-rMj!MZd3?m-l19o|j8@k#NrT0}^OIIq@-Q z8R@NZ2=nmW65DmG(jO!U;D*UJRd9m}4^|Ajza*F1Jri654cZn{d`)@d9p$@fgs4ER zb*@|v%thdD|1x9Ni_b5B!`}nQEuv9q(|ReA+QoXzcPuf-d|ssdd^1ApL)VjRX6Y0T+pvt zcpnmm{Cs6M?q~ms!l&UF6*30HtWF)y1YO*IQ-^K}O%jlyn*3s2(~U}lNYIcG`@iv| z_Hgua2^wXQ7HDD)j>Ne;5ZE>WOxolpeez;oJ$08q+YLM&sGiO2l7J8DBsHemPjNbo zEhL~~L=VB;CIU)Fu6t$SeHE-rizkTo$ptkHoDJU|Wepg?b0Zs^W$~r~8-NEn3Tj^X zio4V$(m=U9wFdSTSh@4_)-bTw9B$!S3b+4#68EV zcGEL_Cl_iS8+1~+m!(!7a8Wg65fDr(FR;72>-qDj=0_9Pfao!9Ip-6r)8oety}O3N zLY*EN(_8Ov*Wf{-v;jwg2Wx4JEVB+JFBx7*0K+ThNdB(Y^?DEqlg4U^oahTZsoHwB zK-$tH0W}(ZWR(&1=Li0xD_Ftg?T*ZvzS&)e4Ds@GyVRV?a)~GKW?h4EZ^-oTD_7BF zv1ygFeRG7jjU4J+d>Ed6+{-i2ynJ{v31b)8eK`))Dzb1(6bM-KE#t+aN?o77%*^5X z{=8@fs(3a*QPEWL+c=|5^P-}cTgT$E+E>1tYl~Yhq_+A4_$8Br`=kmZe}dqz;@zZEdai z_W+>k2d2A!aMgY`PWXJSwW4t~P>>6nA6*=fm!Q30yk75Mqej2Ceb|gVzRpNyqKG~} z5DP24yD4&0etz}wH!ERtRsiIA*GPIJUQGge`YunGhT~QCv_x{VT#4-2(!#mn3_7`( zFaYH!cewbhD0!{{q(5M}{Ui8h5*GDyhv)kd^t4BL0db>b*JVrR4HCBL1ybXu)tkV* z5jJ$W>=+Lxh3Q*ye^wLk$yG??p}Jsi%E}HMDMjE9BTzGI7x1U z2#X2Y-Ubxgp`ZnXH{ddVm#g*ntwDZjh%+Od0v{y$pUzB#366*#yPIyBv+*XIG=4kY z{Bhg;*$BYPJ)T_W@X3zr{4n`_v7z&&N_hTtMelOkz+^rLIz!;W37qW6tx<)tEs4}KT z|B0)cTW&?g2rlh`F*3mu$Km0qWq$a$*i*a$Q>W>Bu-ebN4`&>pO$ehRoA+HC;Xh)eop?46R~qcgg|I{2_^AKs-%7ARzzT7O z!$-Z~nHhaEGcyRnhJSIQ+V2GQf(Iui-johE>tIq@Q-mh@%gBT{%F1la8-C&7;27Zd zqxHtVEv-FpJ~wc~d__$J0nqaTofwL|U)n<^)9i2R>?^o>K4Z1Nw3>FT5sbyAH)>@6{f~4r&s&g6zvbG8%#_+lnCf8&7qvO^g7$#R⋙8W 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

vF=!NkIP{^G^k%2^+L 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 From 9023b73008243904e0f6b995d2c2905523982171 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 16 Jul 2021 13:40:01 -0400 Subject: [PATCH 06/17] Merge pull request #11105 from Verkister/patch-73 Fixes a vore message targeted at the belly object --- code/modules/vore/eating/vorepanel_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 09d1f5b622..c506ff98af 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -563,7 +563,7 @@ to_chat(user,"You begin to push [M] to freedom!") to_chat(M,"[host] begins to push you to freedom!") - to_chat(M.loc,"Someone is trying to escape from inside you!") + to_chat(OB.owner,"Someone is trying to escape from inside you!") sleep(50) if(prob(33)) OB.release_specific_contents(M) From 2c7d0cf851536087f1f650f44e4bfbb6552ab65c Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 16 Jul 2021 13:40:46 -0400 Subject: [PATCH 08/17] Merge pull request #11104 from Verkister/patch-72 Fixes organs in belly squirting blood on the floor --- code/modules/organs/organ.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index e5df765bdc..646787d088 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -177,7 +177,7 @@ var/list/organ_cache = list() if(!owner && reagents) var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list - if(B && prob(40)) + if(B && prob(40) && !isbelly(loc)) //VOREStation Edit reagents.remove_reagent("blood",0.1) blood_splatter(src,B,1) if(config.organs_decay && decays) damage += rand(1,3) From 481c0e314eace4f1e9acdb0da139d7d2954fc285 Mon Sep 17 00:00:00 2001 From: Chompstation Bot Date: Fri, 16 Jul 2021 17:44:40 +0000 Subject: [PATCH 10/17] Convert some bools to TRUE/FALSE instead of 1/0. --- code/ATMOSPHERICS/atmospherics.dm | 2 +- .../binary_devices/algae_generator_vr.dm | 4 +- .../components/binary_devices/circulator.dm | 4 +- .../components/binary_devices/pipeturbine.dm | 8 +- .../components/trinary_devices/filter.dm | 2 +- .../components/trinary_devices/mixer.dm | 2 +- .../components/unary/cold_sink.dm | 4 +- .../components/unary/heat_exchanger.dm | 2 +- .../components/unary/heat_source.dm | 4 +- code/ATMOSPHERICS/pipes/pipe_base.dm | 2 +- code/ATMOSPHERICS/pipes/tank.dm | 2 +- code/ZAS/Fire.dm | 2 +- code/_helpers/unsorted.dm | 6 +- code/_onclick/hud/screen_objects.dm | 2 +- code/controllers/subsystems/airflow.dm | 2 +- code/defines/obj.dm | 28 +- code/defines/obj/weapon.dm | 8 +- code/game/atoms.dm | 4 +- code/game/atoms_movable.dm | 4 +- code/game/dna/dna_modifier.dm | 8 +- .../gamemodes/changeling/powers/armblade.dm | 10 +- .../game/gamemodes/changeling/powers/armor.dm | 6 +- .../changeling/powers/fabricate_clothing.dm | 20 +- code/game/gamemodes/cult/cult_items.dm | 4 +- code/game/gamemodes/cult/cult_structures.dm | 16 +- code/game/gamemodes/cult/cultify/obj.dm | 4 +- code/game/gamemodes/cult/ritual.dm | 4 +- code/game/gamemodes/events/black_hole.dm | 6 +- code/game/gamemodes/events/clang.dm | 4 +- code/game/gamemodes/events/dust.dm | 4 +- code/game/gamemodes/technomancer/core_obj.dm | 2 +- .../technomancer/spells/energy_siphon.dm | 2 +- code/game/machinery/Beacon.dm | 2 +- code/game/machinery/CableLayer.dm | 2 +- code/game/machinery/OpTable.dm | 8 +- code/game/machinery/Sleeper.dm | 8 +- code/game/machinery/adv_med.dm | 8 +- code/game/machinery/adv_med_vr.dm | 2 +- code/game/machinery/ai_slipper.dm | 2 +- code/game/machinery/air_alarm.dm | 4 +- code/game/machinery/airconditioner_vr.dm | 4 +- code/game/machinery/atmo_control.dm | 2 +- code/game/machinery/atmoalter/canister.dm | 2 +- code/game/machinery/atmoalter/clamp.dm | 2 +- code/game/machinery/atmoalter/meter.dm | 2 +- .../atmoalter/portable_atmospherics.dm | 4 +- code/game/machinery/atmoalter/pump.dm | 2 +- code/game/machinery/atmoalter/pump_vr.dm | 2 +- code/game/machinery/atmoalter/scrubber.dm | 4 +- code/game/machinery/atmoalter/zvent.dm | 4 +- code/game/machinery/autolathe.dm | 4 +- code/game/machinery/biogenerator.dm | 4 +- code/game/machinery/bioprinter.dm | 4 +- code/game/machinery/bomb_tester_vr.dm | 4 +- code/game/machinery/buttons.dm | 2 +- code/game/machinery/camera/camera.dm | 2 +- code/game/machinery/camera/camera_assembly.dm | 10 +- code/game/machinery/cell_charger.dm | 2 +- code/game/machinery/cloning.dm | 8 +- code/game/machinery/computer/Operating.dm | 4 +- code/game/machinery/computer/ai_core.dm | 14 +- code/game/machinery/computer/atmos_control.dm | 6 +- .../game/machinery/computer/buildandrepair.dm | 4 +- code/game/machinery/computer/camera.dm | 2 +- code/game/machinery/computer/computer.dm | 4 +- code/game/machinery/computer/guestpass.dm | 2 +- code/game/machinery/computer/medical.dm | 2 +- code/game/machinery/computer/skills.dm | 2 +- code/game/machinery/constructable_frame.dm | 4 +- code/game/machinery/cryo.dm | 4 +- code/game/machinery/cryopod.dm | 8 +- code/game/machinery/deployable.dm | 4 +- code/game/machinery/deployable_vr.dm | 6 +- code/game/machinery/door_control.dm | 2 +- code/game/machinery/doorbell_vr.dm | 2 +- code/game/machinery/doors/airlock_control.dm | 4 +- code/game/machinery/doors/blast_door.dm | 8 +- code/game/machinery/doors/brigdoors.dm | 4 +- code/game/machinery/doors/door.dm | 6 +- code/game/machinery/doors/firedoor.dm | 2 +- .../game/machinery/doors/firedoor_assembly.dm | 4 +- code/game/machinery/doors/unpowered.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 4 +- code/game/machinery/doppler_array.dm | 4 +- .../embedded_controller_base.dm | 6 +- code/game/machinery/event/stage_vr.dm | 4 +- code/game/machinery/exonet_node.dm | 2 +- code/game/machinery/fire_alarm.dm | 6 +- code/game/machinery/flasher.dm | 6 +- code/game/machinery/floodlight.dm | 2 +- code/game/machinery/floor_light.dm | 4 +- code/game/machinery/floorlayer.dm | 2 +- code/game/machinery/gear_dispenser.dm | 4 +- code/game/machinery/hologram.dm | 2 +- code/game/machinery/holoposter.dm | 2 +- code/game/machinery/holosign.dm | 2 +- code/game/machinery/igniter.dm | 4 +- code/game/machinery/iv_drip.dm | 4 +- code/game/machinery/jukebox.dm | 4 +- code/game/machinery/lightswitch.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/machinery/magnet.dm | 6 +- code/game/machinery/mass_driver.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/machinery/neonsign.dm | 2 +- code/game/machinery/newscaster.dm | 2 +- code/game/machinery/nuclear_bomb.dm | 8 +- code/game/machinery/painter_vr.dm | 4 +- code/game/machinery/partslathe_vr.dm | 4 +- code/game/machinery/pda_multicaster.dm | 4 +- code/game/machinery/pipe/pipe_dispenser.dm | 12 +- code/game/machinery/pipe/pipelayer.dm | 2 +- code/game/machinery/portable_turret.dm | 2 +- code/game/machinery/reagents/pump.dm | 4 +- code/game/machinery/recharger.dm | 2 +- code/game/machinery/rechargestation.dm | 4 +- code/game/machinery/records_scanner.dm | 4 +- code/game/machinery/requests_console.dm | 2 +- code/game/machinery/robot_fabricator.dm | 4 +- code/game/machinery/seed_extractor.dm | 4 +- code/game/machinery/spaceheater.dm | 4 +- code/game/machinery/status_display.dm | 4 +- code/game/machinery/status_display_ai.dm | 4 +- code/game/machinery/suit_storage_unit.dm | 8 +- code/game/machinery/supplybeacon.dm | 4 +- code/game/machinery/syndicatebeacon.dm | 12 +- code/game/machinery/telecomms/broadcaster.dm | 8 +- .../machinery/telecomms/telecomunications.dm | 24 +- code/game/machinery/teleporter.dm | 4 +- code/game/machinery/transformer.dm | 4 +- code/game/machinery/transportpod.dm | 4 +- .../machinery/virtual_reality/vr_console.dm | 4 +- code/game/machinery/washing_machine.dm | 4 +- code/game/machinery/wishgranter.dm | 4 +- code/game/mecha/combat/gorilla.dm | 2 +- code/game/mecha/mech_bay.dm | 4 +- code/game/mecha/mech_fabricator.dm | 4 +- code/game/mecha/mech_prosthetics.dm | 4 +- code/game/mecha/mech_sensor.dm | 4 +- code/game/mecha/mecha.dm | 6 +- code/game/mecha/mecha_wreckage.dm | 4 +- code/game/mecha/micro/micro.dm | 2 +- code/game/objects/buckling.dm | 2 +- code/game/objects/effects/alien/aliens.dm | 270 +- code/game/objects/effects/bump_teleporter.dm | 4 +- code/game/objects/effects/chem/foam.dm | 10 +- .../objects/effects/decals/Cleanable/fuel.dm | 4 +- .../effects/decals/Cleanable/humans.dm | 12 +- .../objects/effects/decals/Cleanable/misc.dm | 50 +- .../game/objects/effects/decals/contraband.dm | 2 +- code/game/objects/effects/decals/crayon.dm | 2 +- code/game/objects/effects/decals/misc.dm | 6 +- .../objects/effects/decals/posters/posters.dm | 2 +- code/game/objects/effects/decals/remains.dm | 2 +- code/game/objects/effects/effect_system.dm | 10 +- .../objects/effects/explosion_particles.dm | 4 +- .../game/objects/effects/item_pickup_ghost.dm | 2 +- code/game/objects/effects/landmarks.dm | 12 +- code/game/objects/effects/manifest.dm | 2 +- code/game/objects/effects/mines.dm | 6 +- code/game/objects/effects/misc.dm | 4 +- code/game/objects/effects/overlays.dm | 16 +- code/game/objects/effects/portals.dm | 6 +- code/game/objects/effects/spiders.dm | 6 +- code/game/objects/effects/step_triggers.dm | 2 +- code/game/objects/effects/zone_divider.dm | 4 +- code/game/objects/items.dm | 2 +- code/game/objects/items/bodybag.dm | 4 +- .../objects/items/devices/chameleonproj.dm | 4 +- code/game/objects/items/devices/geiger.dm | 2 +- code/game/objects/items/devices/powersink.dm | 4 +- .../objects/items/devices/radio/intercom.dm | 2 +- .../objects/items/devices/translocator_vr.dm | 4 +- code/game/objects/items/poi_items.dm | 6 +- code/game/objects/items/shooting_range.dm | 4 +- code/game/objects/items/toys/toys.dm | 12 +- code/game/objects/items/uav.dm | 2 +- code/game/objects/items/weapons/RSF.dm | 4 +- .../objects/items/weapons/augment_items.dm | 4 +- .../weapons/circuitboards/circuitboard.dm | 4 +- .../items/weapons/grenades/chem_grenade.dm | 2 +- .../items/weapons/implants/implantchair.dm | 4 +- .../items/weapons/material/chainsaw.dm | 8 +- .../objects/items/weapons/material/knives.dm | 12 +- .../weapons/material/material_weapons.dm | 8 +- .../objects/items/weapons/material/misc.dm | 8 +- .../objects/items/weapons/material/shards.dm | 4 +- .../objects/items/weapons/material/swords.dm | 4 +- .../objects/items/weapons/material/thrown.dm | 4 +- .../items/weapons/material/twohanded.dm | 18 +- .../objects/items/weapons/melee/energy.dm | 30 +- code/game/objects/items/weapons/melee/misc.dm | 4 +- .../objects/items/weapons/melee/misc_vr.dm | 4 +- code/game/objects/items/weapons/mop_deploy.dm | 2 +- code/game/objects/items/weapons/paint.dm | 2 +- code/game/objects/items/weapons/policetape.dm | 2 +- .../objects/items/weapons/storage/bags.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 4 +- .../objects/items/weapons/storage/firstaid.dm | 2 +- .../items/weapons/storage/laundry_basket.dm | 4 +- .../objects/items/weapons/storage/secure.dm | 4 +- code/game/objects/items/weapons/stunbaton.dm | 4 +- .../objects/items/weapons/surgery_tools.dm | 8 +- .../items/weapons/tools/screwdriver.dm | 2 +- .../items/weapons/tools/wirecutters.dm | 4 +- code/game/objects/items/weapons/traps.dm | 14 +- code/game/objects/items/weapons/weaponry.dm | 6 +- code/game/objects/mob_spawner_vr.dm | 8 +- code/game/objects/objs.dm | 6 +- code/game/objects/structures/barricades.dm | 4 +- code/game/objects/structures/barsign.dm | 2 +- code/game/objects/structures/bedsheet_bin.dm | 2 +- code/game/objects/structures/catwalk.dm | 8 +- .../structures/crates_lockers/__closets.dm | 2 +- .../crates_lockers/closets/coffin.dm | 2 +- .../crates_lockers/closets/egg_vr.dm | 2 +- .../crates_lockers/closets/gimmick.dm | 4 +- .../crates_lockers/closets/misc_vr.dm | 8 +- .../crates_lockers/closets/secure/medical.dm | 4 +- .../closets/secure/secure_closets.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 6 +- .../crates_lockers/closets/statue.dm | 4 +- .../crates_lockers/closets/utility_closets.dm | 8 +- .../crates_lockers/closets/walllocker.dm | 16 +- .../structures/crates_lockers/crates.dm | 2 +- .../structures/crates_lockers/largecrate.dm | 2 +- .../structures/crates_lockers/vehiclecage.dm | 2 +- code/game/objects/structures/curtains.dm | 2 +- code/game/objects/structures/dancepole_vr.dm | 4 +- code/game/objects/structures/displaycase.dm | 6 +- code/game/objects/structures/dogbed.dm | 2 +- code/game/objects/structures/door_assembly.dm | 4 +- code/game/objects/structures/extinguisher.dm | 4 +- code/game/objects/structures/fireaxe.dm | 4 +- code/game/objects/structures/fitness.dm | 4 +- code/game/objects/structures/fitness_vr.dm | 18 +- .../game/objects/structures/flora/flora_vr.dm | 4 +- code/game/objects/structures/flora/grass.dm | 2 +- code/game/objects/structures/flora/trees.dm | 4 +- code/game/objects/structures/girders.dm | 10 +- code/game/objects/structures/gravemarker.dm | 6 +- code/game/objects/structures/grille.dm | 8 +- code/game/objects/structures/handrail.dm | 6 +- code/game/objects/structures/inflatable.dm | 12 +- code/game/objects/structures/janicart.dm | 8 +- .../objects/structures/kitchen_foodcart_vr.dm | 4 +- code/game/objects/structures/kitchen_spike.dm | 4 +- code/game/objects/structures/lattice.dm | 4 +- code/game/objects/structures/ledges.dm | 16 +- .../game/objects/structures/map_blocker_vr.dm | 6 +- code/game/objects/structures/mirror.dm | 4 +- code/game/objects/structures/mop_bucket.dm | 4 +- code/game/objects/structures/morgue.dm | 8 +- code/game/objects/structures/plasticflaps.dm | 4 +- code/game/objects/structures/props/swarm.dm | 8 +- code/game/objects/structures/railing.dm | 8 +- code/game/objects/structures/safe.dm | 6 +- code/game/objects/structures/salvageable.dm | 4 +- code/game/objects/structures/signs.dm | 4 +- code/game/objects/structures/simple_doors.dm | 8 +- code/game/objects/structures/snowman.dm | 2 +- code/game/objects/structures/stasis_cage.dm | 2 +- .../stool_bed_chair_nest/alien_nests.dm | 2 +- .../structures/stool_bed_chair_nest/bed.dm | 10 +- .../structures/stool_bed_chair_nest/chairs.dm | 2 +- .../stool_bed_chair_nest/stools_vr.dm | 2 +- .../stool_bed_chair_nest/wheelchair.dm | 2 +- .../game/objects/structures/tank_dispenser.dm | 8 +- code/game/objects/structures/target_stake.dm | 8 +- code/game/objects/structures/transit_tubes.dm | 12 +- code/game/objects/structures/trash_pile_vr.dm | 4 +- .../game/objects/structures/under_wardrobe.dm | 2 +- code/game/objects/structures/watercloset.dm | 16 +- .../objects/structures/windoor_assembly.dm | 10 +- code/game/objects/structures/window.dm | 12 +- .../game/objects/structures/window_spawner.dm | 4 +- code/game/shuttle_engines.dm | 8 +- code/game/turfs/simulated/wall_attacks.dm | 4 +- code/game/turfs/simulated/wall_types.dm | 2 +- code/game/turfs/simulated/wall_types_vr.dm | 8 +- code/game/turfs/simulated/walls.dm | 2 +- code/game/turfs/space/space.dm | 2 +- code/game/turfs/unsimulated/planetary.dm | 2 +- code/game/turfs/unsimulated/shuttle.dm | 2 +- code/game/turfs/unsimulated/walls.dm | 2 +- code/game/vehicles/vehicle.dm | 6 +- code/modules/admin/verbs/buildmode.dm | 8 +- code/modules/assembly/infrared.dm | 2 +- .../awaymissions/bluespaceartillery.dm | 10 +- code/modules/awaymissions/gateway.dm | 18 +- code/modules/awaymissions/loot_vr.dm | 2 +- code/modules/blob/blob.dm | 6 +- code/modules/clothing/masks/monitor.dm | 4 +- code/modules/clothing/shoes/magboots.dm | 6 +- code/modules/clothing/spacesuits/rig/rig.dm | 8 +- .../clothing/spacesuits/void/wizard.dm | 4 +- .../detectivework/microscope/dnascanner.dm | 4 +- .../detectivework/microscope/microscope.dm | 4 +- code/modules/detectivework/tools/rag.dm | 2 +- code/modules/economy/ATM.dm | 2 +- code/modules/economy/Accounts_DB.dm | 4 +- code/modules/economy/cash.dm | 4 +- code/modules/economy/cash_register.dm | 2 +- code/modules/economy/mint.dm | 4 +- code/modules/economy/vending.dm | 4 +- code/modules/economy/vending_machines.dm | 4 +- code/modules/events/meteor_strike_vr.dm | 6 +- code/modules/flufftext/Hallucination.dm | 4 +- code/modules/food/drinkingglass/metaglass.dm | 2 +- code/modules/food/food/drinks/bottle.dm | 6 +- .../modules/food/food/drinks/drinkingglass.dm | 2 +- code/modules/food/food/drinks/jar.dm | 2 +- .../kitchen/cooking_machines/_appliance.dm | 4 +- code/modules/food/kitchen/gibber.dm | 4 +- code/modules/food/kitchen/icecream.dm | 4 +- code/modules/food/kitchen/microwave.dm | 4 +- .../food/kitchen/smartfridge/smartfridge.dm | 4 +- code/modules/holodeck/HolodeckObjects.dm | 10 +- code/modules/holomap/station_holomap.dm | 4 +- .../modules/hydroponics/beekeeping/beehive.dm | 4 +- code/modules/hydroponics/seed_machines.dm | 4 +- code/modules/hydroponics/seed_storage.dm | 4 +- .../hydroponics/spreading/spreading.dm | 14 +- code/modules/hydroponics/trays/tray.dm | 4 +- code/modules/hydroponics/trays/tray_soil.dm | 2 +- .../subtypes/reagents.dm | 2 +- code/modules/library/lib_items.dm | 6 +- code/modules/library/lib_machines.dm | 16 +- code/modules/mining/drilling/drill.dm | 8 +- .../machinery/machine_input_output_plates.dm | 8 +- .../mining/machinery/machine_stacking.dm | 8 +- .../mining/machinery/machine_unloading.dm | 4 +- code/modules/mining/mine_items.dm | 14 +- code/modules/mining/mine_outcrops.dm | 6 +- code/modules/mining/mine_turfs.dm | 14 +- code/modules/mining/mineral_effect.dm | 4 +- code/modules/mining/ore_box.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 1996 +++++++++++++ code/modules/mob/living/bot/SLed209bot.dm | 2 +- code/modules/mob/living/bot/bot.dm | 2 +- code/modules/mob/living/bot/ed209bot.dm | 2 +- code/modules/mob/living/bot/mulebot.dm | 4 +- code/modules/mob/living/bot/secbot.dm | 2 +- .../carbon/human/species/species_attack.dm | 8 +- .../carbon/human/species/species_attack_vr.dm | 4 +- .../species/station/traits_vr/weaver_objs.dm | 6 +- .../mob/living/carbon/human/unarmed_attack.dm | 16 +- .../mob/living/carbon/metroid/items.dm | 4 +- .../mob/living/carbon/metroid/powers.dm | 4 +- code/modules/mob/living/living.dm | 6 +- code/modules/mob/living/silicon/ai/ai.dm | 12 +- code/modules/mob/living/silicon/ai/death.dm | 2 +- .../modules/mob/living/silicon/decoy/decoy.dm | 2 +- .../silicon/robot/dogborg/dog_modules_vr.dm | 4 +- .../mob/living/silicon/robot/drone/drone.dm | 2 +- .../silicon/robot/drone/drone_manufacturer.dm | 4 +- .../mob/living/silicon/robot/drone/swarm.dm | 2 +- code/modules/mob/living/simple_mob/life.dm | 2 +- .../animal/giant_spider/_giant_spider.dm | 2 +- .../subtypes/animal/passive/mouse.dm | 2 +- .../subtypes/animal/passive/possum.dm | 2 +- .../simple_mob/subtypes/animal/sif/diyaab.dm | 2 +- .../simple_mob/subtypes/animal/sif/hare.dm | 2 +- .../simple_mob/subtypes/animal/sif/siffet.dm | 2 +- .../simple_mob/subtypes/horror/Master.dm | 2 +- .../subtypes/humanoid/mercs/mercs.dm | 4 +- .../simple_mob/subtypes/humanoid/pirates.dm | 2 +- .../mechanical/corrupt_maint_drone_vr.dm | 2 +- .../subtypes/mechanical/viscerator.dm | 2 +- .../subtypes/occult/constructs/harvester.dm | 2 +- .../subtypes/occult/constructs/wraith.dm | 2 +- .../simple_mob/subtypes/occult/creature.dm | 2 +- .../simple_mob/subtypes/vore/solargrub.dm | 4 +- .../subtypes/vore/solargrub_larva.dm | 2 +- code/modules/mob/mob.dm | 2472 +++++++++++++++++ code/modules/mob/mob_defines.dm | 4 +- code/modules/mob/new_player/new_player.dm | 4 +- .../modular_computers/NTNet/NTNet_relay.dm | 4 +- .../computers/subtypes/dev_console.dm | 2 +- .../computers/subtypes/dev_telescreen.dm | 4 +- code/modules/multiz/hoist.dm | 8 +- code/modules/multiz/ladder_assembly_vr.dm | 4 +- code/modules/multiz/ladders.dm | 4 +- code/modules/multiz/ladders_vr.dm | 12 +- code/modules/multiz/stairs.dm | 4 +- code/modules/multiz/turf.dm | 2 +- code/modules/nifsoft/nif_softshop.dm | 2 +- code/modules/nifsoft/software/10_combat.dm | 4 +- code/modules/overmap/overmap_shuttle.dm | 4 +- code/modules/overmap/sectors.dm | 2 +- code/modules/overmap/ships/computers/helm.dm | 2 +- .../overmap/ships/computers/sensors.dm | 2 +- .../overmap/ships/engines/gas_thruster.dm | 4 +- code/modules/overmap/turfs.dm | 2 +- code/modules/paperwork/filingcabinet.dm | 4 +- code/modules/paperwork/paper.dm | 2 +- code/modules/paperwork/papershredder.dm | 4 +- code/modules/paperwork/pen.dm | 4 +- code/modules/paperwork/photocopier.dm | 4 +- code/modules/persistence/filth.dm | 2 +- code/modules/persistence/graffiti.dm | 2 +- code/modules/persistence/noticeboard.dm | 4 +- .../power/antimatter/containment_jar.dm | 4 +- code/modules/power/antimatter/control.dm | 4 +- code/modules/power/antimatter/engine.dm | 4 +- code/modules/power/antimatter/fuel.dm | 4 +- code/modules/power/antimatter/shielding.dm | 4 +- code/modules/power/apc.dm | 2 +- code/modules/power/breaker_box.dm | 4 +- code/modules/power/cable.dm | 2 +- code/modules/power/cable_ender.dm | 2 +- code/modules/power/debug_items.dm | 4 +- code/modules/power/fusion/core/_core.dm | 6 +- .../fusion/fuel_assembly/fuel_compressor.dm | 4 +- .../fusion/fuel_assembly/fuel_injector.dm | 6 +- .../power/fusion/fusion_particle_catcher.dm | 8 +- .../modules/power/fusion/gyrotron/gyrotron.dm | 2 +- code/modules/power/fusion/magpower.dm | 2 +- code/modules/power/generator.dm | 4 +- code/modules/power/gravitygenerator.dm | 8 +- code/modules/power/grid_checker.dm | 4 +- code/modules/power/lighting.dm | 10 +- code/modules/power/lighting_vr.dm | 8 +- code/modules/power/port_gen.dm | 4 +- code/modules/power/port_gen_vr.dm | 2 +- code/modules/power/power.dm | 2 +- code/modules/power/sensors/powernet_sensor.dm | 4 +- .../power/sensors/sensor_monitoring.dm | 4 +- code/modules/power/singularity/collector.dm | 4 +- .../power/singularity/containment_field.dm | 6 +- code/modules/power/singularity/emitter.dm | 4 +- .../power/singularity/field_generator.dm | 6 +- code/modules/power/singularity/generator.dm | 4 +- .../particle_accelerator/particle.dm | 4 +- .../particle_accelerator.dm | 8 +- .../particle_accelerator/particle_control.dm | 4 +- .../particle_accelerator/particle_smasher.dm | 4 +- code/modules/power/singularity/singularity.dm | 6 +- code/modules/power/smes.dm | 4 +- code/modules/power/solar.dm | 14 +- .../power/supermatter/setup_supermatter.dm | 4 +- code/modules/power/supermatter/supermatter.dm | 6 +- code/modules/power/terminal.dm | 2 +- code/modules/power/tracker.dm | 4 +- .../projectiles/guns/automatic_fire.dm | 4 +- .../guns/energy/cell_loaded_vr/nsfw_cells.dm | 4 +- .../projectiles/guns/energy/gunsword_vr.dm | 8 +- .../projectiles/guns/energy/laser_vr.dm | 2 +- .../projectiles/guns/launcher/crossbow.dm | 8 +- .../projectiles/guns/launcher/syringe_gun.dm | 2 +- .../modules/projectiles/projectile/bullets.dm | 18 +- .../projectiles/projectile/bullets_vr.dm | 2 +- code/modules/projectiles/projectile/hook.dm | 2 +- .../modules/projectiles/projectile/special.dm | 4 +- .../targeting/targeting_overlay.dm | 6 +- code/modules/random_map/automata/diona.dm | 4 +- code/modules/random_map/drop/droppod_doors.dm | 6 +- .../modules/reagents/machinery/chem_master.dm | 4 +- .../reagents/machinery/dispenser/cartridge.dm | 2 +- .../machinery/dispenser/dispenser2.dm | 2 +- .../machinery/dispenser/reagent_tank.dm | 944 +++++++ code/modules/reagents/machinery/grinder.dm | 4 +- .../reagents/reagent_containers/glass.dm | 6 +- .../reagents/reagent_containers/hypospray.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 4 +- code/modules/recycling/conveyor2.dm | 4 +- .../recycling/disposal-construction.dm | 18 +- code/modules/recycling/disposal.dm | 12 +- code/modules/recycling/sortingmachinery.dm | 4 +- code/modules/research/message_server.dm | 8 +- code/modules/research/rdmachines.dm | 4 +- code/modules/resleeving/machines.dm | 8 +- code/modules/rogueminer_vr/landmarks.dm | 4 +- .../security levels/keycard authentication.dm | 2 +- code/modules/shieldgen/emergency_shield.dm | 16 +- code/modules/shieldgen/energy_field.dm | 8 +- code/modules/shieldgen/energy_shield.dm | 4 +- code/modules/shieldgen/sheldwallgen.dm | 10 +- code/modules/shieldgen/shield_capacitor.dm | 2 +- code/modules/shieldgen/shield_diffuser.dm | 4 +- code/modules/shieldgen/shield_gen.dm | 2 +- code/modules/shieldgen/shield_generator.dm | 2 +- code/modules/shuttles/landmarks.dm | 8 +- .../spells/aoe_turf/conjure/forcewall.dm | 6 +- .../modules/spells/targeted/ethereal_jaunt.dm | 4 +- code/modules/tables/bench.dm | 2 +- code/modules/tables/flipping.dm | 2 +- code/modules/tables/tables.dm | 6 +- code/modules/telesci/telepad.dm | 2 +- code/modules/turbolift/turbolift_console.dm | 4 +- code/modules/vehicles/Securitrain_vr.dm | 6 +- code/modules/vehicles/bike.dm | 2 +- code/modules/vehicles/cargo_train.dm | 6 +- code/modules/vehicles/quad.dm | 2 +- code/modules/vehicles/rover_vr.dm | 6 +- code/modules/vehicles/vehicle.dm | 6 +- code/modules/virus2/analyser.dm | 4 +- code/modules/virus2/biohazard destroyer.dm | 4 +- code/modules/virus2/dishincubator.dm | 4 +- code/modules/virus2/isolator.dm | 4 +- .../vore/fluffstuff/custom_items_vr.dm | 20 +- code/modules/vore/smoleworld/smoleworld_vr.dm | 16 +- .../vore/weight/fitness_machines_vr.dm | 8 +- .../xenoarcheaology/anomaly_container.dm | 2 +- .../xenoarcheaology/artifacts/artifact.dm | 2 +- .../xenoarcheaology/artifacts/autocloner.dm | 2 +- .../xenoarcheaology/artifacts/crystal.dm | 2 +- .../xenoarcheaology/artifacts/gigadrill.dm | 6 +- .../xenoarcheaology/artifacts/replicator.dm | 2 +- code/modules/xenoarcheaology/boulder.dm | 4 +- code/modules/xenoarcheaology/finds/special.dm | 2 +- code/modules/xenoarcheaology/sampling.dm | 2 +- .../tools/artifact_analyser.dm | 4 +- .../tools/artifact_harvester.dm | 4 +- .../xenoarcheaology/tools/artifact_scanner.dm | 4 +- .../tools/geosample_scanner.dm | 4 +- .../tools/suspension_generator.dm | 10 +- .../xenoarcheaology/tools/tools_pickaxe.dm | 2 +- .../xenobio2/machinery/core_extractor.dm | 4 +- .../xenobio2/machinery/gene_manipulators.dm | 4 +- code/modules/xenobio2/machinery/injector.dm | 4 +- .../xenobio2/machinery/slime_replicator.dm | 4 +- 523 files changed, 6976 insertions(+), 1284 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 39e9e44da2..093a8e544d 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -10,7 +10,7 @@ Pipelines + Other Objects -> Pipe network */ /obj/machinery/atmospherics - anchored = 1 + anchored = TRUE idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index e43bc4b25a..451a2a8bce 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -6,8 +6,8 @@ icon = 'icons/obj/machines/algae_vr.dmi' icon_state = "algae-off" circuit = /obj/item/weapon/circuitboard/algae_farm - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE power_channel = EQUIP use_power = USE_POWER_IDLE idle_power_usage = 100 // Minimal lights to keep algae alive diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index c09c482cc1..5291627786 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -5,7 +5,7 @@ desc = "A gas circulator turbine and heat exchanger." icon = 'icons/obj/power.dmi' icon_state = "circ-unassembled" - anchored = 0 + anchored = FALSE pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF var/kinetic_efficiency = 0.04 //combined kinetic and kinetic-to-electric efficiency @@ -21,7 +21,7 @@ var/stored_energy = 0 var/temperature_overlay - density = 1 + density = TRUE /obj/machinery/atmospherics/binary/circulator/New() ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 2a83dd5933..da5f37ff0c 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -3,8 +3,8 @@ desc = "A gas turbine. Converting pressure into energy since 1884." icon = 'icons/obj/pipeturbine.dmi' icon_state = "turbine" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE var/efficiency = 0.4 var/kin_energy = 0 @@ -229,8 +229,8 @@ desc = "Electrogenerator. Converts rotation into power." icon = 'icons/obj/pipeturbine.dmi' icon_state = "motor" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE var/kin_to_el_ratio = 0.1 //How much kinetic energy will be taken from turbine and converted into electricity var/obj/machinery/atmospherics/pipeturbine/turbine diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index a787aa1873..48085569bc 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -3,7 +3,7 @@ icon_state = "map" construction_type = /obj/item/pipe/trinary/flippable pipe_state = "filter" - density = 0 + density = FALSE level = 1 name = "Gas filter" diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 7344a3e732..8cecbc6c65 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -3,7 +3,7 @@ icon_state = "map" construction_type = /obj/item/pipe/trinary/flippable pipe_state = "mixer" - density = 0 + density = FALSE level = 1 name = "Gas mixer" diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 3568a87a42..dea0487b48 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -6,8 +6,8 @@ desc = "Cools gas when connected to pipe network" icon = 'icons/obj/Cryogenic2_vr.dmi' icon_state = "freezer_0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_OFF idle_power_usage = 5 // 5 Watts for thermostat related circuitry circuit = /obj/item/weapon/circuitboard/unary_atmos/cooler diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index a3571fed8b..91616f8d8f 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/atmospherics/heat_exchanger.dmi' icon_state = "intact" pipe_state = "heunary" - density = 1 + density = TRUE name = "Heat Exchanger" desc = "Exchanges heat between two input gases. Setup for fast heat transfer" diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index 365be85b70..aea5730672 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -6,8 +6,8 @@ desc = "Heats gas when connected to a pipe network" icon = 'icons/obj/Cryogenic2_vr.dmi' icon_state = "heater_0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_OFF idle_power_usage = 5 //5 Watts for thermostat related circuitry circuit = /obj/item/weapon/circuitboard/unary_atmos/heater diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm index 5f384ed457..0d687b8db0 100644 --- a/code/ATMOSPHERICS/pipes/pipe_base.dm +++ b/code/ATMOSPHERICS/pipes/pipe_base.dm @@ -17,7 +17,7 @@ var/in_stasis = FALSE //minimum pressure before check_pressure(...) should be called - can_buckle = 1 + can_buckle = TRUE buckle_require_restraints = 1 buckle_lying = -1 diff --git a/code/ATMOSPHERICS/pipes/tank.dm b/code/ATMOSPHERICS/pipes/tank.dm index a893facff6..6380786288 100644 --- a/code/ATMOSPHERICS/pipes/tank.dm +++ b/code/ATMOSPHERICS/pipes/tank.dm @@ -16,7 +16,7 @@ dir = SOUTH initialize_directions = SOUTH pipe_flags = PIPING_DEFAULT_LAYER_ONLY - density = 1 + density = TRUE /obj/machinery/atmospherics/pipe/tank/New() icon_state = "air" diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 9c8ec74d4d..1f281d334a 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -108,7 +108,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin /obj/fire //Icon for fire on turfs. - anchored = 1 + anchored = TRUE mouse_opacity = 0 blend_mode = BLEND_ADD diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 9d9273d4bf..07853d58f9 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1177,10 +1177,10 @@ var/mob/dview/dview_mob = new /mob/dview invisibility = 101 - density = 0 + density = FALSE - anchored = 1 - simulated = 0 + anchored = TRUE + simulated = FALSE see_in_dark = 1e6 diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 0c10066e58..00446add6d 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -12,7 +12,7 @@ appearance_flags = TILE_BOUND|PIXEL_SCALE|NO_CLIENT_COLOR layer = LAYER_HUD_BASE plane = PLANE_PLAYER_HUD - unacidable = 1 + unacidable = TRUE var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. var/datum/hud/hud = null // A reference to the owner HUD, if any. diff --git a/code/controllers/subsystems/airflow.dm b/code/controllers/subsystems/airflow.dm index 4881113623..21ec24f7c7 100644 --- a/code/controllers/subsystems/airflow.dm +++ b/code/controllers/subsystems/airflow.dm @@ -135,7 +135,7 @@ SUBSYSTEM_DEF(airflow) airflow_od = 0 if (!density) - density = 1 + density = TRUE airflow_od = 1 return TRUE diff --git a/code/defines/obj.dm b/code/defines/obj.dm index e6228ab2e2..4e60163547 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -1,8 +1,8 @@ /obj/structure/signpost icon = 'icons/obj/stationobjs.dmi' icon_state = "signpost" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE /obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob) return attack_hand(user) @@ -16,15 +16,15 @@ var/mark = "" icon = 'icons/misc/mark.dmi' icon_state = "blank" - anchored = 1 + anchored = TRUE layer = 99 mouse_opacity = 0 - unacidable = 1//Just to be sure. + unacidable = TRUE//Just to be sure. /obj/effect/beam name = "beam" - density = 0 - unacidable = 1//Just to be sure. + density = FALSE + unacidable = TRUE//Just to be sure. var/def_zone pass_flags = PASSTABLE @@ -33,8 +33,8 @@ name = "begin" icon = 'icons/obj/stationobjs.dmi' icon_state = "begin" - anchored = 1.0 - unacidable = 1 + anchored = TRUE + unacidable = TRUE /* * This item is completely unused, but removing it will break something in R&D and Radio code causing PDA and Ninja code to fail on compile @@ -58,7 +58,7 @@ /obj/effect/projection name = "Projection" desc = "This looks like a projection of something." - anchored = 1.0 + anchored = TRUE /obj/effect/shut_controller name = "shut controller" @@ -70,9 +70,9 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "showcase_1" desc = "A stand with the empty body of a cyborg bolted to it." - density = 1 - anchored = 1 - unacidable = 1//temporary until I decide whether the borg can be removed. -veyveyr + density = TRUE + anchored = TRUE + unacidable = TRUE//temporary until I decide whether the borg can be removed. -veyveyr /obj/structure/showcase/sign name = "WARNING: WILDERNESS" @@ -116,8 +116,8 @@ icon = 'icons/misc/beach.dmi' icon_state = "beachball" name = "beach ball" - density = 0 - anchored = 0 + density = FALSE + anchored = FALSE w_class = ITEMSIZE_LARGE force = 0.0 throwforce = 0.0 diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index da096d8fca..0b5d1a0719 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -19,8 +19,8 @@ icon = 'icons/obj/items.dmi' icon_state = "rcd" opacity = 0 - density = 0 - anchored = 0.0 + density = FALSE + anchored = FALSE var/stored_matter = 0 var/mode = 1 w_class = ITEMSIZE_NORMAL @@ -303,7 +303,7 @@ w_class = ITEMSIZE_HUGE can_hold = list(/obj/item/weapon/stock_parts) storage_slots = 50 - use_to_pickup = 1 + use_to_pickup = TRUE allow_quick_gather = 1 allow_quick_empty = 1 collection_mode = 1 @@ -326,7 +326,7 @@ /obj/item/weapon/reagent_containers/glass/beaker) //End of YAWN Changes storage_slots = 200 - use_to_pickup = 1 + use_to_pickup = TRUE allow_quick_gather = 1 allow_quick_empty = 1 collection_mode = 1 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index acf31b5079..5c8ff8974d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -11,7 +11,7 @@ var/pass_flags = 0 var/throwpass = 0 var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom. - var/simulated = 1 //filter for actions - used by lighting overlays + var/simulated = TRUE //filter for actions - used by lighting overlays var/atom_say_verb = "says" var/bubble_icon = "normal" ///what icon the atom uses for speechbubbles var/fluorescent // Shows up under a UV light. @@ -454,7 +454,7 @@ if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. blood_DNA = list() - was_bloodied = 1 + was_bloodied = TRUE if(!blood_color) blood_color = "#A10808" if(istype(M)) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index d443b0bf0a..08b0f3e056 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -3,7 +3,7 @@ appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE glide_size = 8 var/last_move = null //The direction the atom last moved - var/anchored = 0 + var/anchored = FALSE // var/elevation = 2 - not used anywhere var/moving_diagonally var/move_speed = 10 @@ -523,7 +523,7 @@ //Overlays /atom/movable/overlay var/atom/master = null - anchored = 1 + anchored = TRUE /atom/movable/overlay/New() for(var/x in src.verbs) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 908651abf9..1f2815426b 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -65,8 +65,8 @@ desc = "It scans DNA structures." icon = 'icons/obj/Cryogenic2.dmi' icon_state = "scanner_0" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 50 active_power_usage = 300 @@ -274,7 +274,7 @@ desc = "Scan DNA." icon_keyboard = "med_key" icon_screen = "dna" - density = 1 + density = TRUE circuit = /obj/item/weapon/circuitboard/scan_consolenew var/selected_ui_block = 1.0 var/selected_ui_subblock = 1.0 @@ -290,7 +290,7 @@ var/obj/machinery/dna_scannernew/connected = null var/obj/item/weapon/disk/data/disk = null var/selected_menu_key = PAGE_UI - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 400 diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index 4a84fde371..fc54b32891 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -54,7 +54,7 @@ icon_state = "arm_blade" w_class = ITEMSIZE_HUGE force = 5 - anchored = 1 + anchored = TRUE throwforce = 0 //Just to be on the safe side throw_range = 0 throw_speed = 0 @@ -138,8 +138,8 @@ icon_state = "arm_blade" force = 40 armor_penetration = 15 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE pry = 1 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") defend_chance = 60 @@ -157,8 +157,8 @@ desc = "A grotesque claw made out of bone and flesh that cleaves through people as a hot knife through butter." icon_state = "ling_claw" force = 15 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") defend_chance = 50 projectile_parry_chance = 15 diff --git a/code/game/gamemodes/changeling/powers/armor.dm b/code/game/gamemodes/changeling/powers/armor.dm index aa6e2bf0b0..5a6db52833 100644 --- a/code/game/gamemodes/changeling/powers/armor.dm +++ b/code/game/gamemodes/changeling/powers/armor.dm @@ -39,7 +39,7 @@ //it still ends up in your blood. (also balance but muh fluff) allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/tank/oxygen) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all. - canremove = 0 + canremove = FALSE /obj/item/clothing/suit/space/changeling/New() ..() @@ -58,7 +58,7 @@ flags = BLOCKHAIR //Again, no THICKMATERIAL. armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) body_parts_covered = HEAD|FACE|EYES - canremove = 0 + canremove = FALSE /obj/item/clothing/head/helmet/space/changeling/dropped() qdel(src) @@ -68,7 +68,7 @@ name = "fleshy grippers" icon_state = "lingspacesuit" action_button_name = "Toggle Grippers" - canremove = 0 + canremove = FALSE /obj/item/clothing/shoes/magboots/changeling/set_slowdown() slowdown = shoes? max(SHOES_SLOWDOWN, shoes.slowdown): SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster. diff --git a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm index 6ec87a64d4..c3c5f2aa15 100644 --- a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm +++ b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm @@ -42,7 +42,7 @@ var/global/list/changeling_fabricated_clothing = list( desc = "The flesh all around us has grown a new layer of cells that can shift appearance and create a biological fabric that cannot be distinguished from \ ordinary cloth, allowing us to make ourselves appear to wear almost anything." origin_tech = list() //The base chameleon items have origin technology, which we will inherit if we don't null out this variable. - canremove = 0 //Since this is essentially flesh impersonating clothes, tearing someone's skin off as if it were clothing isn't possible. + canremove = FALSE //Since this is essentially flesh impersonating clothes, tearing someone's skin off as if it were clothing isn't possible. /obj/item/clothing/under/chameleon/changeling/emp_act(severity) //As these are purely organic, EMP does nothing to them. return @@ -63,7 +63,7 @@ var/global/list/changeling_fabricated_clothing = list( desc = "Our head is swelled with a large quanity of rapidly shifting skin cells. We can reform our head to resemble various hats and \ helmets that biologicals are so fond of wearing." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/clothing/head/chameleon/changeling/emp_act(severity) return @@ -88,7 +88,7 @@ var/global/list/changeling_fabricated_clothing = list( item_state = "armor" desc = "The cells in our chest are rapidly shifting, ready to reform into material that can resemble most pieces of clothing." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/clothing/suit/chameleon/changeling/emp_act(severity) return @@ -113,7 +113,7 @@ var/global/list/changeling_fabricated_clothing = list( item_state = "black" desc = "Our feet are overlayed with another layer of flesh and bone on top. We can reform our feet to resemble various boots and shoes." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/clothing/shoes/chameleon/changeling/emp_act() return @@ -138,7 +138,7 @@ var/global/list/changeling_fabricated_clothing = list( item_state = "backpack" desc = "A large pouch imbedded in our back, it can shift form to resemble many common backpacks that other biologicals are fond of using." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/weapon/storage/backpack/chameleon/changeling/emp_act() return @@ -166,7 +166,7 @@ var/global/list/changeling_fabricated_clothing = list( desc = "Our hands have a second layer of flesh on top. We can reform our hands to resemble a large variety of fabrics and materials that biologicals \ tend to wear on their hands. Remember that these won't protect your hands from harm." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/clothing/gloves/chameleon/changeling/emp_act() return @@ -192,7 +192,7 @@ var/global/list/changeling_fabricated_clothing = list( desc = "A transparent visor of brittle chitin covers our face. We can reform it to resemble various masks that biologicals use. It can also utilize internal \ tanks.." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/clothing/mask/chameleon/changeling/emp_act() return @@ -213,7 +213,7 @@ var/global/list/changeling_fabricated_clothing = list( item_state = "glasses" desc = "A transparent piece of eyewear made out of brittle chitin. We can reform it to resemble various glasses and goggles." origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/clothing/glasses/chameleon/changeling/emp_act() return @@ -238,7 +238,7 @@ var/global/list/changeling_fabricated_clothing = list( ) item_state = "utility" origin_tech = list() - canremove = 0 + canremove = FALSE /obj/item/weapon/storage/belt/chameleon/changeling/emp_act() return @@ -262,7 +262,7 @@ var/global/list/changeling_fabricated_clothing = list( electronic_warfare = 1 //The lack of RFID stuff makes it hard for AIs to track, I guess. *handwaves* registered_user = null access = null - canremove = 0 + canremove = FALSE /obj/item/weapon/card/id/syndicate/changeling/New(mob/user as mob) ..() diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 9d192890a0..881dde134d 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -10,8 +10,8 @@ drop_sound = 'sound/items/drop/sword.ogg' pickup_sound = 'sound/items/pickup/sword.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - edge = 1 - sharp = 1 + edge = TRUE + sharp = TRUE /obj/item/weapon/melee/cultblade/cultify() return diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 241d613275..3740010914 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -1,6 +1,6 @@ /obj/structure/cult - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE icon = 'icons/obj/cult.dmi' /obj/structure/cult/cultify() @@ -59,7 +59,7 @@ STOP_PROCESSING(SSobj, src) playsound(src,shatter_sound, 75, 1) isbroken = 1 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]-broken" set_light(0) @@ -75,7 +75,7 @@ user.do_attack_animation(src) playsound(src,shatter_sound, 75, 1) isbroken = 1 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]-broken" set_light(0) else @@ -94,7 +94,7 @@ START_PROCESSING(SSobj, src) to_chat(user, "You repair \the [src].") isbroken = 0 - density = 1 + density = TRUE icon_state = initial(icon_state) set_light(5) @@ -127,9 +127,9 @@ desc = "You're pretty sure that abyss is staring back." icon = 'icons/obj/cult.dmi' icon_state = "hole" - density = 1 - unacidable = 1 - anchored = 1.0 + density = TRUE + unacidable = TRUE + anchored = TRUE var/spawnable = null /obj/effect/gateway/active diff --git a/code/game/gamemodes/cult/cultify/obj.dm b/code/game/gamemodes/cult/cultify/obj.dm index 3ac41e0047..91dabc556f 100644 --- a/code/game/gamemodes/cult/cultify/obj.dm +++ b/code/game/gamemodes/cult/cultify/obj.dm @@ -48,7 +48,7 @@ /obj/machinery/atmospherics/cultify() if(src.invisibility != INVISIBILITY_MAXIMUM) src.invisibility = INVISIBILITY_MAXIMUM - density = 0 + density = FALSE /obj/machinery/appliance/cooker/cultify() new /obj/structure/cult/talisman(loc) @@ -65,7 +65,7 @@ /obj/machinery/door/cultify() if(invisibility != INVISIBILITY_MAXIMUM) invisibility = INVISIBILITY_MAXIMUM - density = 0 + density = FALSE anim(target = src, a_icon = 'icons/effects/effects.dmi', a_icon_state = "breakdoor", sleeptime = 10) qdel(src) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 5a33a1d49a..f62221f752 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -22,11 +22,11 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," /obj/effect/rune desc = "A strange collection of symbols drawn in blood." - anchored = 1 + anchored = TRUE icon = 'icons/obj/rune.dmi' icon_state = "1" var/visibility = 0 - unacidable = 1 + unacidable = TRUE layer = TURF_LAYER diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm index a8b0071f65..96ab98acb1 100644 --- a/code/game/gamemodes/events/black_hole.dm +++ b/code/game/gamemodes/events/black_hole.dm @@ -4,9 +4,9 @@ desc = "FUCK FUCK FUCK AAAHHH" icon_state = "bhole3" opacity = 1 - unacidable = 1 - density = 0 - anchored = 1 + unacidable = TRUE + density = FALSE + anchored = TRUE /obj/effect/bhole/New() spawn(4) diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index fd6a36e3d4..5aa3372e32 100644 --- a/code/game/gamemodes/events/clang.dm +++ b/code/game/gamemodes/events/clang.dm @@ -13,8 +13,8 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 icon = 'icons/obj/objects.dmi' icon_state = "immrod" throwforce = 100 - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE /obj/effect/immovablerod/Bump(atom/clong) if(istype(clong, /turf/simulated/shuttle)) //Skip shuttles without actually deleting the rod diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm index 750de2ebd5..85391b7352 100644 --- a/code/game/gamemodes/events/dust.dm +++ b/code/game/gamemodes/events/dust.dm @@ -64,8 +64,8 @@ The "dust" will damage the hull of the station causin minor hull breaches. desc = "Dust in space." icon = 'icons/obj/meteor.dmi' icon_state = "space_dust" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/strength = 2 //ex_act severity number var/life = 2 //how many things we hit before qdel(src) diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm index cc2102cc45..56611103f7 100644 --- a/code/game/gamemodes/technomancer/core_obj.dm +++ b/code/game/gamemodes/technomancer/core_obj.dm @@ -7,7 +7,7 @@ item_state = "technomancer_core" w_class = ITEMSIZE_HUGE slot_flags = SLOT_BACK - unacidable = 1 + unacidable = TRUE origin_tech = list( TECH_MATERIAL = 8, TECH_ENGINEERING = 8, TECH_POWER = 8, TECH_BLUESPACE = 10, TECH_COMBAT = 7, TECH_MAGNET = 9, TECH_DATA = 5 diff --git a/code/game/gamemodes/technomancer/spells/energy_siphon.dm b/code/game/gamemodes/technomancer/spells/energy_siphon.dm index 9bf8dd578f..1659b8f17b 100644 --- a/code/game/gamemodes/technomancer/spells/energy_siphon.dm +++ b/code/game/gamemodes/technomancer/spells/energy_siphon.dm @@ -181,7 +181,7 @@ if(A == firer) // For this, you CAN shoot yourself. on_impact(A) - density = 0 + density = FALSE invisibility = 101 qdel(src) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index b6f6cb25ac..f1066caffc 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -5,7 +5,7 @@ desc = "A device that draws power from bluespace and creates a permanent tracking beacon." level = 1 // underfloor layer = UNDER_JUNK_LAYER - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 0 var/obj/item/device/radio/beacon/Beacon diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index 8edc131ac8..d4045aefe8 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -2,7 +2,7 @@ name = "automatic cable layer" icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 + density = TRUE var/obj/structure/cable/last_piece var/obj/item/stack/cable_coil/cable var/max_cable = 100 diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 2200ef94c6..228857a2dc 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -3,8 +3,8 @@ desc = "Used for advanced medical procedures." icon = 'icons/obj/surgery.dmi' icon_state = "table2-idle" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 1 active_power_usage = 5 @@ -37,14 +37,14 @@ return if(3.0) if(prob(25)) - density = 0 + density = FALSE else return /obj/machinery/optable/attack_hand(mob/user as mob) if(HULK in usr.mutations) visible_message("\The [usr] destroys \the [src]!") - density = 0 + density = FALSE qdel(src) return diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index e53cd7818c..c3be1bbf46 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icon. icon_state = "sleeperconsole" var/obj/machinery/sleeper/sleeper - anchored = 1 //About time someone fixed this. - density = 1 //VOREStation Edit - Big console + anchored = TRUE //About time someone fixed this. + density = TRUE //VOREStation Edit - Big console dir = 8 use_power = USE_POWER_IDLE idle_power_usage = 40 @@ -87,8 +87,8 @@ desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner." icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icons icon_state = "sleeper_0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/sleeper var/mob/living/carbon/human/occupant = null var/list/available_chemicals = list() diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index de0d8dbcd9..d54f3e6521 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -6,8 +6,8 @@ name = "Body Scanner" icon = 'icons/obj/Cryogenic2.dmi' icon_state = "body_scanner_0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/body_scanner use_power = USE_POWER_IDLE idle_power_usage = 60 @@ -546,8 +546,8 @@ icon = 'icons/obj/Cryogenic2.dmi' icon_state = "body_scannerconsole" dir = 8 - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/scanner_console var/printing = null diff --git a/code/game/machinery/adv_med_vr.dm b/code/game/machinery/adv_med_vr.dm index c7bcf0d065..e8ff59adc0 100644 --- a/code/game/machinery/adv_med_vr.dm +++ b/code/game/machinery/adv_med_vr.dm @@ -5,7 +5,7 @@ /obj/machinery/body_scanconsole icon = 'icons/obj/Cryogenic2_vr.dmi' icon_state = "scanner_terminal_off" - density = 1 + density = TRUE /obj/machinery/bodyscanner/proc/get_occupant_data_vr(list/incoming, mob/living/carbon/human/H) var/humanprey = 0 diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index aead0c79f1..86f55631a4 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -2,7 +2,7 @@ name = "\improper AI Liquid Dispenser" icon = 'icons/obj/device.dmi' icon_state = "liquid_dispenser" - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 var/uses = 20 diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 32cc9d0a3f..228cf5472f 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -31,7 +31,7 @@ icon_state = "alarm_0" layer = ABOVE_WINDOW_LAYER vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 80 active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. @@ -50,7 +50,7 @@ var/rcon_setting = 2 var/rcon_time = 0 var/locked = 1 - panel_open = 0 // If it's been screwdrivered open. + panel_open = FALSE // If it's been screwdrivered open. var/aidisabled = 0 var/shorted = 0 circuit = /obj/item/weapon/circuitboard/airalarm diff --git a/code/game/machinery/airconditioner_vr.dm b/code/game/machinery/airconditioner_vr.dm index ea54edfa2e..f9a1437041 100644 --- a/code/game/machinery/airconditioner_vr.dm +++ b/code/game/machinery/airconditioner_vr.dm @@ -7,8 +7,8 @@ desc = "A massive machine that can either add or remove thermal energy from the surrounding environment. Must be secured onto a powered wire node to function." icon = 'icons/obj/machines/thermoregulator_vr.dmi' icon_state = "lasergen" - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE use_power = USE_POWER_OFF //is powered directly from cables active_power_usage = 150 KILOWATTS //BIG POWER diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 29d9ed5562..27fc21f4f1 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -4,7 +4,7 @@ name = "Gas Sensor" desc = "Senses atmospheric conditions." - anchored = 1 + anchored = TRUE var/state = 0 var/id_tag diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 83fd594382..4fd1ba7942 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -2,7 +2,7 @@ name = "canister" icon = 'icons/obj/atmos.dmi' icon_state = "yellow" - density = 1 + density = TRUE var/health = 100.0 w_class = ITEMSIZE_HUGE diff --git a/code/game/machinery/atmoalter/clamp.dm b/code/game/machinery/atmoalter/clamp.dm index 318145c229..a77999a661 100644 --- a/code/game/machinery/atmoalter/clamp.dm +++ b/code/game/machinery/atmoalter/clamp.dm @@ -7,7 +7,7 @@ description_info = "Click-dragging this to yourself while adjacent will attempt to remove it from the pipe." icon = 'icons/atmos/clamp.dmi' icon_state = "pclamp0" - anchored = 1.0 + anchored = TRUE var/obj/machinery/atmospherics/pipe/simple/target = null var/open = 1 diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index e5e4b65ab4..25f5e12567 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -5,7 +5,7 @@ icon_state = "meterX" var/obj/machinery/atmospherics/pipe/target = null var/list/pipes_on_turf = list() - anchored = 1.0 + anchored = TRUE power_channel = ENVIRON var/frequency = 0 var/id diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index dc530ecc2f..e51b4825cc 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -71,7 +71,7 @@ connected_port.connected_device = src connected_port.on = 1 //Activate port updates - anchored = 1 //Prevent movement + anchored = TRUE //Prevent movement //Actually enforce the air sharing var/datum/pipe_network/network = connected_port.return_network(src) @@ -89,7 +89,7 @@ if(network) network.gases -= air_contents - anchored = 0 + anchored = FALSE connected_port.connected_device = null connected_port = null diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index f97a66bd78..1a502c675f 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/atmos.dmi' icon_state = "psiphon:0" - density = 1 + density = TRUE w_class = ITEMSIZE_NORMAL var/on = 0 diff --git a/code/game/machinery/atmoalter/pump_vr.dm b/code/game/machinery/atmoalter/pump_vr.dm index e056086baf..2c3b5c14d9 100644 --- a/code/game/machinery/atmoalter/pump_vr.dm +++ b/code/game/machinery/atmoalter/pump_vr.dm @@ -2,7 +2,7 @@ name = "Huge Air Pump" icon = 'icons/obj/atmos.dmi' icon_state = "siphon:0" - anchored = 1 + anchored = TRUE volume = 500000 use_power = USE_POWER_IDLE diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index f154e64d89..7ab58e2c88 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/atmos.dmi' icon_state = "pscrubber:0" - density = 1 + density = TRUE w_class = ITEMSIZE_NORMAL var/on = 0 @@ -152,7 +152,7 @@ desc = "A larger variation of the portable scrubber, for industrial scrubbing of air. Must be turned on from a remote terminal." icon = 'icons/obj/atmos_vr.dmi' //VOREStation Edit - New Sprite icon_state = "scrubber:0" - anchored = 1 + anchored = TRUE volume = 500000 volume_rate = 7000 diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/game/machinery/atmoalter/zvent.dm index 163e86a74d..d4f2ccfc02 100644 --- a/code/game/machinery/atmoalter/zvent.dm +++ b/code/game/machinery/atmoalter/zvent.dm @@ -3,8 +3,8 @@ icon = 'icons/obj/pipes.dmi' icon_state = "vent-db" - density = 0 - anchored=1 + density = FALSE + anchored=TRUE var/on = 0 var/volume_rate = 800 diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 8fa5141839..b3d315cbad 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -2,8 +2,8 @@ name = "autolathe" desc = "It produces items using metal and glass." icon_state = "autolathe" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 2000 diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 2790a5ec15..e5cf8da8e1 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -17,8 +17,8 @@ desc = "Converts plants into biomass, which can be used for fertilizer and sort-of-synthetic products." icon = 'icons/obj/biogenerator_vr.dmi' //VOREStation Edit icon_state = "biogen-stand" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/biogenerator use_power = USE_POWER_IDLE idle_power_usage = 40 diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index fe2c027eb1..41ea09e214 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -7,8 +7,8 @@ icon = 'icons/obj/surgery_vr.dmi' //VOREStation Edit icon_state = "bioprinter" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 40 active_power_usage = 300 diff --git a/code/game/machinery/bomb_tester_vr.dm b/code/game/machinery/bomb_tester_vr.dm index ea9add72ce..24c5da8d6c 100644 --- a/code/game/machinery/bomb_tester_vr.dm +++ b/code/game/machinery/bomb_tester_vr.dm @@ -7,8 +7,8 @@ desc = "A device that can calculate the potential explosive yield of provided gases." icon = 'icons/obj/machines/bomb_tester_vr.dmi' icon_state = "generic" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE idle_power_usage = 50 active_power_usage = 1.5 KILOWATTS diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 19716f5d74..e0fa69147b 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -6,7 +6,7 @@ desc = "A remote control switch for something." var/id = null var/active = 0 - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 4 diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 8657585718..367f2f8803 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -13,7 +13,7 @@ var/c_tag = null var/c_tag_order = 999 var/status = 1 - anchored = 1.0 + anchored = TRUE var/invuln = 0 var/bugged = 0 var/obj/item/weapon/camera_assembly/assembly = null diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index d8facf1726..0660bff759 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons icon_state = "cameracase" w_class = ITEMSIZE_SMALL - anchored = 0 + anchored = FALSE matter = list(MAT_STEEL = 700,MAT_GLASS = 300) @@ -32,7 +32,7 @@ if(W.is_wrench() && isturf(src.loc)) playsound(src, W.usesound, 50, 1) to_chat(user, "You wrench the assembly into place.") - anchored = 1 + anchored = TRUE state = 1 update_icon() auto_turn() @@ -43,14 +43,14 @@ if(istype(W, /obj/item/weapon/weldingtool)) if(weld(W, user)) to_chat(user, "You weld the assembly securely into place.") - anchored = 1 + anchored = TRUE state = 2 return else if(W.is_wrench()) playsound(src, W.usesound, 50, 1) to_chat(user, "You unattach the assembly from its place.") - anchored = 0 + anchored = FALSE update_icon() state = 0 return @@ -71,7 +71,7 @@ if(weld(W, user)) to_chat(user, "You unweld the assembly from its place.") state = 1 - anchored = 1 + anchored = TRUE return diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 581284f9ac..1980079098 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -7,7 +7,7 @@ desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells." icon = 'icons/obj/power.dmi' icon_state = "recharger" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE power_channel = EQUIP idle_power_usage = 5 diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 53da61382e..49c917f312 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -29,8 +29,8 @@ /obj/machinery/clonepod name = "cloning pod" desc = "An electronically-lockable pod for growing organic tissue." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/clonepod icon = 'icons/obj/cloning.dmi' icon_state = "pod_0" @@ -255,11 +255,11 @@ to_chat(user, "Can not do that while [src] is in use.") else if(anchored) - anchored = 0 + anchored = FALSE connected.pods -= src connected = null else - anchored = 1 + anchored = TRUE playsound(src, W.usesound, 100, 1) if(anchored) user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.") diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index c965a54b15..4efec263f8 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -3,8 +3,8 @@ /obj/machinery/computer/operating name = "patient monitoring console" desc = "Used to monitor the vitals of a patient." - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE icon_keyboard = "med_key" icon_screen = "crew" circuit = /obj/item/weapon/circuitboard/operating diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 8b5cce2aee..fd6d65d9fd 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -1,6 +1,6 @@ /obj/structure/AIcore - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE name = "\improper AI core" icon = 'icons/mob/AI.dmi' icon_state = "0" @@ -18,7 +18,7 @@ playsound(src, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) to_chat(user, "You wrench the frame into place.") - anchored = 1 + anchored = TRUE state = 1 if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P @@ -36,7 +36,7 @@ playsound(src, P.usesound, 50, 1) if(do_after(user, 20 * P.toolspeed)) to_chat(user, "You unfasten the frame.") - anchored = 0 + anchored = FALSE state = 0 if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) @@ -187,7 +187,7 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva name = "inactive AI" icon = 'icons/mob/AI.dmi' icon_state = "ai-empty" - anchored = 1 + anchored = TRUE state = 20//So it doesn't interact based on the above. Not really necessary. /obj/structure/AIcore/deactivated/Destroy() @@ -240,7 +240,7 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva user.visible_message("\The [user] decides not to unbolt \the [src].") return user.visible_message("\The [user] finishes unfastening \the [src]!") - anchored = 0 + anchored = FALSE return else user.visible_message("\The [user] starts to bolt \the [src] to the plating...") @@ -249,7 +249,7 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva user.visible_message("\The [user] decides not to bolt \the [src].") return user.visible_message("\The [user] finishes fastening down \the [src]!") - anchored = 1 + anchored = TRUE return else return ..() diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 73dc0ec4b4..32fbaf3082 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -8,8 +8,8 @@ icon_keyboard = "generic_key" icon_screen = "comm_logs" light_color = "#00b000" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/atmoscontrol req_access = list(access_ce) var/list/monitored_alarm_ids = null @@ -24,7 +24,7 @@ icon_screen = "pcu_atmo" icon_state = "pcu" icon_keyboard = "pcu_key" - density = 0 + density = FALSE /obj/machinery/computer/atmoscontrol/attack_ai(var/mob/user as mob) tgui_interact(user) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 054c9c2cc3..930b354ea0 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -1,8 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 /obj/structure/computerframe - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE name = "computer frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "0" diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 5b39bc618f..24a84b4f14 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -65,7 +65,7 @@ icon_screen = null light_range_on = 0 network = list(NETWORK_THUNDER) - density = 0 + density = FALSE circuit = null GLOBAL_LIST_EMPTY(entertainment_screens) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 956c3fe2d7..ac06e34a86 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -2,8 +2,8 @@ name = "computer" icon = 'icons/obj/computer.dmi' icon_state = "computer" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 300 active_power_usage = 300 diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 811b12f27c..850eb1b296 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -85,7 +85,7 @@ vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature icon_keyboard = null icon_screen = "pass" - density = 0 + density = FALSE circuit = /obj/item/weapon/circuitboard/guestpass var/obj/item/weapon/card/id/giver diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 419e4d1ffe..a7d2da6ac5 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -501,7 +501,7 @@ icon_keyboard = "pcu_key" light_color = "#00b000" circuit = /obj/item/weapon/circuitboard/med_data/pcu - density = 0 + density = FALSE #undef FIELD #undef MED_FIELD diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index e8c69e000b..ab7d5aca4a 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -15,7 +15,7 @@ light_color = "#00b000" req_one_access = list(access_heads) circuit = /obj/item/weapon/circuitboard/skills/pcu - density = 0 + density = FALSE var/obj/item/weapon/card/id/scan = null var/authenticated = null var/rank = null diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 3717da58c5..a2f310aaf1 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -5,8 +5,8 @@ name = "machine frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "box_0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_OFF var/obj/item/weapon/circuitboard/circuit = null var/list/components = null diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index d822bcb739..35a060863e 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -5,8 +5,8 @@ desc = "Used to cool people down for medical reasons. Totally." icon = 'icons/obj/cryogenics.dmi' // map only icon_state = "pod_preview" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE layer = UNDER_JUNK_LAYER interact_offline = 1 diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 8d5dd425e3..b7ba4a4339 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -14,7 +14,7 @@ icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon icon_state = "cellconsole" circuit = /obj/item/weapon/circuitboard/cryopodcontrol - density = 0 + density = FALSE interact_offline = 1 var/mode = null @@ -183,7 +183,7 @@ desc = "A bewildering tangle of machinery and pipes." icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon icon_state = "cryo_rear" - anchored = 1 + anchored = TRUE dir = WEST //Cryopods themselves. @@ -192,8 +192,8 @@ desc = "A man-sized pod for entering suspended animation." icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon icon_state = "cryopod_0" //VOREStation Edit - New Icon - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE dir = WEST var/base_icon_state = "cryopod_0" //VOREStation Edit - New Icon diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 9b14dc68bb..a72d814c79 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -13,8 +13,8 @@ Deployable items name = "deployable barrier" desc = "A deployable barrier. Swipe your ID card to lock/unlock it." icon = 'icons/obj/objects.dmi' - anchored = 0.0 - density = 1.0 + anchored = FALSE + density = TRUE icon_state = "barrier0" var/health = 100.0 var/maxhealth = 100.0 diff --git a/code/game/machinery/deployable_vr.dm b/code/game/machinery/deployable_vr.dm index 25fdd4ed60..bbb835b763 100644 --- a/code/game/machinery/deployable_vr.dm +++ b/code/game/machinery/deployable_vr.dm @@ -5,7 +5,7 @@ icon_state = "cutout_basic" maxhealth = 15 //Weaker than normal barricade - anchored = 0 + anchored = FALSE var/fake_name = "unknown" var/fake_desc = "You have to be closer to examine this creature." @@ -36,7 +36,7 @@ return toppled = TRUE icon_state = "cutout_pushed_over" - density = 0 + density = FALSE name = initial(name) desc = initial(desc) visible_message("[src] topples over!") @@ -46,7 +46,7 @@ return toppled = FALSE icon_state = initial(icon_state) - density = 1 + density = TRUE name = fake_name desc = fake_desc visible_message("[src] is uprighted to their proper position.") diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 674ff6e24d..6e5618d39e 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -13,7 +13,7 @@ 2=Network Access */ - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 4 diff --git a/code/game/machinery/doorbell_vr.dm b/code/game/machinery/doorbell_vr.dm index 1b6174a2ca..d90a46000f 100644 --- a/code/game/machinery/doorbell_vr.dm +++ b/code/game/machinery/doorbell_vr.dm @@ -7,7 +7,7 @@ use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 200 - anchored = 1 + anchored = TRUE var/id_tag = null var/chime_sound = 'sound/machines/doorbell.ogg' diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 83878767b7..3c91bd7c02 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -152,7 +152,7 @@ name = "airlock sensor" desc = "Sends atmospheric readings to a nearby controller." - anchored = 1 + anchored = TRUE power_channel = ENVIRON var/id_tag @@ -237,7 +237,7 @@ layer = ABOVE_WINDOW_LAYER name = "access button" - anchored = 1 + anchored = TRUE power_channel = ENVIRON var/master_tag diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index a086a490e0..4fd60b20b2 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -316,7 +316,7 @@ /obj/machinery/door/blast/regular/open icon_state = "pdoor0" - density = 0 + density = FALSE opacity = 0 // SUBTYPE: Shutters @@ -346,7 +346,7 @@ /obj/machinery/door/blast/gate/open icon_state = "tshutter0" - density = 0 + density = FALSE /obj/machinery/door/blast/gate/thin name = "thin gate" @@ -360,7 +360,7 @@ /obj/machinery/door/blast/gate/thin/open icon_state = "shutter2_1" - density = 0 + density = FALSE /obj/machinery/door/blast/gate/bars name = "prison bars" @@ -374,7 +374,7 @@ /obj/machinery/door/blast/gate/bars/open icon_state = "bars_1" - density = 0 + density = FALSE // SUBTYPE: Multi-tile // Pod doors ported from Paradise diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index a98c9abb04..c62c7ea94d 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -23,8 +23,8 @@ layer = ABOVE_WINDOW_LAYER desc = "A remote control for a door." req_access = list(access_brig) - anchored = 1.0 // can't pick it up - density = 0 // can walk through it. + anchored = TRUE // can't pick it up + density = FALSE // can walk through it. var/id = null // id of door it controls. var/activation_time = 0 var/timer_duration = 0 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 9b4994892a..d138653261 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -6,9 +6,9 @@ desc = "It opens and closes." icon = 'icons/obj/doors/Doorint.dmi' icon_state = "door1" - anchored = 1 + anchored = TRUE opacity = 1 - density = 1 + density = TRUE can_atmos_pass = ATMOS_PASS_PROC layer = DOOR_OPEN_LAYER blocks_emissive = EMISSIVE_BLOCK_UNIQUE @@ -76,7 +76,7 @@ return /obj/machinery/door/Destroy() - density = 0 + density = FALSE update_nearby_tiles() . = ..() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 5b51e90c82..133fb3dc4d 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -15,7 +15,7 @@ icon_state = "door_open" req_one_access = list(access_eva) //access_atmospherics, access_engine_equip) opacity = 0 - density = 0 + density = FALSE layer = DOOR_OPEN_LAYER - 0.01 open_layer = DOOR_OPEN_LAYER - 0.01 // Just below doors when open closed_layer = DOOR_CLOSED_LAYER + 0.01 // Just above doors when closed diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index ab1de73c60..829cce4e7c 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -3,9 +3,9 @@ desc = "It can save lives." icon = 'icons/obj/doors/DoorHazard.dmi' icon_state = "door_construction" - anchored = 0 + anchored = FALSE opacity = 0 - density = 1 + density = TRUE var/wired = 0 var/glass = FALSE diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm index ef84d47f3d..515ed18017 100644 --- a/code/game/machinery/doors/unpowered.dm +++ b/code/game/machinery/doors/unpowered.dm @@ -22,4 +22,4 @@ name = "door" icon_state = "door1" opacity = 1 - density = 1 + density = TRUE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index a50e54ba75..6950be687a 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -57,7 +57,7 @@ qdel(src) /obj/machinery/door/window/Destroy() - density = 0 + density = FALSE update_nearby_tiles() return ..() @@ -117,7 +117,7 @@ sleep(10) explosion_resistance = 0 - density = 0 + density = FALSE update_icon() update_nearby_tiles() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index cab4f5c37f..7b8039cb6f 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -1,9 +1,9 @@ var/list/doppler_arrays = list() /obj/machinery/doppler_array - anchored = 1 + anchored = TRUE name = "tachyon-doppler array" - density = 1 + density = TRUE desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array." dir = NORTH diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 196edfd224..4a05005ac5 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -1,6 +1,6 @@ /obj/machinery/embedded_controller name = "Embedded Controller" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 var/datum/embedded_program/program //the currently executing program @@ -67,8 +67,8 @@ icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_control_standby" power_channel = ENVIRON - density = 0 - unacidable = 1 + density = FALSE + unacidable = TRUE var/id_tag //var/radio_power_use = 50 //power used to xmit signals diff --git a/code/game/machinery/event/stage_vr.dm b/code/game/machinery/event/stage_vr.dm index 1190498a21..1ed1e6c419 100644 --- a/code/game/machinery/event/stage_vr.dm +++ b/code/game/machinery/event/stage_vr.dm @@ -3,8 +3,8 @@ desc = "It's a stage!" icon = 'icons/misc/event/stage.dmi' icon_state = "stage1" - anchored = 1.0 - density = 0 + anchored = TRUE + density = FALSE pixel_y = -224 pixel_x = -224 plane = -44 \ No newline at end of file diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm index 8fe0e3b5f0..1eda308142 100644 --- a/code/game/machinery/exonet_node.dm +++ b/code/game/machinery/exonet_node.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit icon_state = "exonet" //VOREStation Edit idle_power_usage = 2500 - density = 1 + density = TRUE var/on = 1 var/toggle = 1 diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index 4f976ab64a..879a8ae7a8 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -14,13 +14,13 @@ FIRE ALARM var/time = 10.0 var/timing = 0.0 var/lockdownbyai = 0 - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 6 power_channel = ENVIRON var/last_process = 0 - panel_open = 0 + panel_open = FALSE var/seclevel circuit = /obj/item/weapon/circuitboard/firealarm var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles @@ -199,7 +199,7 @@ Just a object used in constructing fire alarms var/time = 10.0 var/timing = 0.0 var/lockdownbyai = 0 - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index d8b4a23994..848108285b 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -11,7 +11,7 @@ var/last_flash = 0 //Don't want it getting spammed like regular flashes var/strength = 10 //How weakened targets are when flashed. var/base_state = "mflash" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 @@ -20,9 +20,9 @@ desc = "A portable flashing device. Wrench to activate and deactivate. Cannot detect slow movements." icon_state = "pflash1" strength = 8 - anchored = 0 + anchored = FALSE base_state = "pflash" - density = 1 + density = TRUE /obj/machinery/flasher/power_change() ..() diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 694a715bcd..a5cc7d6750 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -3,7 +3,7 @@ desc = "Let there be light!" icon = 'icons/obj/machines/floodlight.dmi' icon_state = "flood00" - density = 1 + density = TRUE light_system = MOVABLE_LIGHT_DIRECTIONAL light_cone_y_offset = 8 var/on = 0 diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index 1bcb90a596..a870245be9 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -6,7 +6,7 @@ var/list/floor_light_cache = list() icon_state = "base" desc = "A backlit floor panel." layer = TURF_LAYER+0.001 - anchored = 0 + anchored = FALSE use_power = USE_POWER_ACTIVE idle_power_usage = 2 active_power_usage = 20 @@ -20,7 +20,7 @@ var/list/floor_light_cache = list() var/default_light_colour = LIGHT_COLOR_INCANDESCENT_BULB /obj/machinery/floor_light/prebuilt - anchored = 1 + anchored = TRUE /obj/machinery/floor_light/attackby(var/obj/item/W, var/mob/user) if(W.is_screwdriver()) diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm index c77dff55ec..dfbf3c38df 100644 --- a/code/game/machinery/floorlayer.dm +++ b/code/game/machinery/floorlayer.dm @@ -2,7 +2,7 @@ name = "automatic floor layer" icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 + density = TRUE var/turf/old_turf var/on = 0 var/obj/item/stack/tile/T diff --git a/code/game/machinery/gear_dispenser.dm b/code/game/machinery/gear_dispenser.dm index 690379fdb6..94d53cb360 100644 --- a/code/game/machinery/gear_dispenser.dm +++ b/code/game/machinery/gear_dispenser.dm @@ -147,8 +147,8 @@ var/list/dispenser_presets = list() desc = "An industrial U-Tak-It Dispenser unit designed to fetch all kinds of equipment." icon = 'icons/obj/suitdispenser.dmi' icon_state = "geardispenser" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/list/dispenses = list(/datum/gear_disp/trash) // put your gear datums here! var/datum/gear_disp/one_setting var/global/list/gear_distributed_to = list() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index fa9ab86e54..dd9fe7faa6 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -189,7 +189,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 5 active_power_usage = 100 diff --git a/code/game/machinery/holoposter.dm b/code/game/machinery/holoposter.dm index 7a71d9fc64..2e1d609ccc 100644 --- a/code/game/machinery/holoposter.dm +++ b/code/game/machinery/holoposter.dm @@ -4,7 +4,7 @@ GLOBAL_LIST_EMPTY(holoposters) desc = "A wall-mounted holographic projector displaying advertisements by all manner of factions. How much do they pay to advertise here?" icon = 'icons/obj/holoposter_vr.dmi' icon_state = "off" - anchored = 1 + anchored = TRUE use_power = 1 idle_power_usage = 80 power_channel = ENVIRON diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 7a3cd8c861..b21fb1120c 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -8,7 +8,7 @@ use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 4 - anchored = 1 + anchored = TRUE var/lit = 0 var/id = null var/on_icon = "sign_on" diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 70a2e3ce4c..060bd029fc 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -5,7 +5,7 @@ icon_state = "igniter1" var/id = null var/on = 1.0 - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 4 @@ -53,7 +53,7 @@ var/disable = 0 var/last_spark = 0 var/base_state = "migniter" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 4 diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 5a63fd03be..5a78697b2a 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -2,8 +2,8 @@ name = "\improper IV drip" desc = "Helpful for giving someone blood! Or taking it away. It giveth, it taketh." icon = 'icons/obj/iv_drip.dmi' - anchored = 0 - density = 0 + anchored = FALSE + density = FALSE /obj/machinery/iv_drip/var/mob/living/carbon/human/attached = null diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 54047a1088..54a65642f0 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -14,8 +14,8 @@ icon = 'icons/obj/jukebox.dmi' icon_state = "jukebox2-nopower" var/state_base = "jukebox2" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE power_channel = EQUIP use_power = USE_POWER_IDLE idle_power_usage = 10 diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 44a80c4445..e8a3544e43 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/power_vr.dmi' // VOREStation Edit icon_state = "light1" layer = ABOVE_WINDOW_LAYER - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 power_channel = LIGHT diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index aed6cc368e..40d348cb6f 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -105,7 +105,7 @@ Class Procs: var/power_init_complete = FALSE var/list/component_parts = null //list of all the parts used to build it, if made from certain kinds of frames. var/uid - var/panel_open = 0 + var/panel_open = FALSE var/global/gl_uid = 1 var/clicksound // sound played on succesful interface. Just put it in the list of vars at the start. var/clickvol = 40 // volume diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index d702a300b5..f713cea2d0 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -10,7 +10,7 @@ name = "Electromagnetic Generator" desc = "A device that uses station power to create points of magnetic energy." plane = PLATING_PLANE - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 50 @@ -188,8 +188,8 @@ name = "Magnetic Control Console" icon = 'icons/obj/airlock_machines.dmi' // uses an airlock machine icon, THINK GREEN HELP THE ENVIRONMENT - RECYCLING! icon_state = "airlock_control_standby" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 45 var/frequency = 1449 diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 25805c694e..7e6721f109 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -5,7 +5,7 @@ desc = "Shoots things into space." icon = 'icons/obj/stationobjs.dmi' icon_state = "mass_driver" - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 50 diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 6a92186ac5..90a623d0b9 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -9,7 +9,7 @@ var/global/list/navbeacons = list() // no I don't like putting this in, but it w name = "navigation beacon" desc = "A beacon used for bot navigation." plane = PLATING_PLANE - anchored = 1 + anchored = TRUE var/open = 0 // true if cover is open var/locked = 1 // true if controls are locked var/freq = null // DEPRECATED we don't use radios anymore! diff --git a/code/game/machinery/neonsign.dm b/code/game/machinery/neonsign.dm index 742a810d4a..6e146af007 100644 --- a/code/game/machinery/neonsign.dm +++ b/code/game/machinery/neonsign.dm @@ -9,7 +9,7 @@ use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 4 - anchored = 1 + anchored = TRUE var/lit = 0 var/id = null var/on_icon = "sign_on" diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 82cf00ce17..4a40ad8ed2 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -161,7 +161,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster) var/hitstaken = 0 //Death at 3 hits from an item with force>=15 var/datum/feed_channel/viewing_channel = null light_range = 0 - anchored = 1 + anchored = TRUE var/obj/machinery/exonet_node/node = null circuit = /obj/item/weapon/circuitboard/newscaster // TGUI diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index cb83cddd92..b9646235c0 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -5,7 +5,7 @@ var/bomb_set desc = "Uh oh. RUN!!!!" icon = 'icons/obj/stationobjs.dmi' icon_state = "nuclearbomb0" - density = 1 + density = TRUE var/deployable = 0.0 var/extended = 0.0 var/lighthack = 0 @@ -157,7 +157,7 @@ var/bomb_set if(do_after(user,80 * O.toolspeed)) if(!src || !user) return user.visible_message("[user] crowbars [src] off of the anchors. It can now be moved.", "You jam the crowbar under the nuclear device and lift it off its anchors. You can now move it!") - anchored = 0 + anchored = FALSE removal_stage = 5 return ..() @@ -190,7 +190,7 @@ var/bomb_set onclose(user, "nuclearbomb") else if(deployable) if(removal_stage < 5) - anchored = 1 + anchored = TRUE visible_message("With a steely snap, bolts slide out of [src] and anchor it to the flooring!") else visible_message("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.") @@ -336,7 +336,7 @@ var/bomb_set if(href_list["anchor"]) if(removal_stage == 5) - anchored = 0 + anchored = FALSE visible_message("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.") return diff --git a/code/game/machinery/painter_vr.dm b/code/game/machinery/painter_vr.dm index 00e5ebcd5f..e10311915d 100644 --- a/code/game/machinery/painter_vr.dm +++ b/code/game/machinery/painter_vr.dm @@ -10,8 +10,8 @@ desc = "A machine to give your apparel a fresh new color! Recommended to use with white items for best results." icon = 'icons/obj/vending_vr.dmi' icon_state = "colormate" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/list/processing = list() var/activecolor = "#FFFFFF" var/list/allowed_types = list( diff --git a/code/game/machinery/partslathe_vr.dm b/code/game/machinery/partslathe_vr.dm index 733486b5de..6f83f6d158 100644 --- a/code/game/machinery/partslathe_vr.dm +++ b/code/game/machinery/partslathe_vr.dm @@ -21,8 +21,8 @@ icon = 'icons/obj/partslathe_vr.dmi' icon_state = "partslathe-idle" circuit = /obj/item/weapon/circuitboard/partslathe - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 30 active_power_usage = 5000 diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm index a70f1ede37..ef7612bf87 100644 --- a/code/game/machinery/pda_multicaster.dm +++ b/code/game/machinery/pda_multicaster.dm @@ -3,8 +3,8 @@ desc = "This machine mirrors messages sent to it to specific departments." icon = 'icons/obj/stationobjs.dmi' icon_state = "pdamulti" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/telecomms/pda_multicaster use_power = USE_POWER_IDLE idle_power_usage = 750 diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 0d5e42f771..7f0ffc10b1 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -3,8 +3,8 @@ desc = "A large machine that can rapidly dispense pipes." icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/unwrenched = 0 var/wait = 0 var/p_layer = PIPING_LAYER_REGULAR @@ -149,8 +149,8 @@ desc = "A large machine that can rapidly dispense pipes. This one seems to dispsense disposal pipes." icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE disposals = TRUE //Allow you to drag-drop disposal pipes into it @@ -169,9 +169,9 @@ // adding a pipe dispensers that spawn unhooked from the ground /obj/machinery/pipedispenser/orderable - anchored = 0 + anchored = FALSE unwrenched = 1 /obj/machinery/pipedispenser/disposal/orderable - anchored = 0 + anchored = FALSE unwrenched = 1 diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index 9e0d3702eb..3debf68f53 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -2,7 +2,7 @@ name = "automatic pipe layer" icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 + density = TRUE circuit = /obj/item/weapon/circuitboard/pipelayer var/turf/old_turf // Last turf we were on. var/old_dir // Last direction we were facing. diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 5bf026c234..0b1e575596 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -933,7 +933,7 @@ name = "turret frame" icon = 'icons/obj/turrets.dmi' icon_state = "turret_frame" - density=1 + density=TRUE var/target_type = /obj/machinery/porta_turret // The type we intend to build var/build_step = 0 //the current step in the building process var/finish_name="turret" //the name applied to the product turret diff --git a/code/game/machinery/reagents/pump.dm b/code/game/machinery/reagents/pump.dm index b73ce06a4a..c48e8d9834 100644 --- a/code/game/machinery/reagents/pump.dm +++ b/code/game/machinery/reagents/pump.dm @@ -8,8 +8,8 @@ conditions can cause different byproducts to be produced.
\ Magma or Lava can be pumped to produce mineralized fluid." - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE icon = 'icons/obj/machines/reagent.dmi' icon_state = "pump" diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 98155993ba..f52c14da46 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -4,7 +4,7 @@ desc = "A standard recharger for all devices that use power." icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit icon_state = "recharger0" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 4 active_power_usage = 40000 //40 kW diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index cf2d4a978d..de35add336 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -3,8 +3,8 @@ desc = "A heavy duty rapid charging system, designed to quickly recharge cyborg power reserves." icon = 'icons/obj/objects.dmi' icon_state = "borgcharger0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/recharge_station use_power = USE_POWER_IDLE idle_power_usage = 50 diff --git a/code/game/machinery/records_scanner.dm b/code/game/machinery/records_scanner.dm index c4e3ead84b..b80548e876 100644 --- a/code/game/machinery/records_scanner.dm +++ b/code/game/machinery/records_scanner.dm @@ -4,8 +4,8 @@ var/outputdir = 0 icon = 'icons/obj/stationobjs.dmi' icon_state = "scanner_idle" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/lastuser = null /obj/machinery/scanner/New() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 03a8ab1665..a8c4e21dbc 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -25,7 +25,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console name = "requests console" desc = "A console intended to send requests to different departments on the station." - anchored = 1 + anchored = TRUE icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit icon_state = "req_comp_0" layer = ABOVE_WINDOW_LAYER diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 43c281e42e..1f9c9c8f70 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -2,8 +2,8 @@ name = "robotic fabricator" icon = 'icons/obj/robotics.dmi' icon_state = "fab-idle" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/metal_amount = 0 var/operating = 0 var/obj/item/robot_parts/being_built = null diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 0ae1785d50..4f29a3e347 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -3,8 +3,8 @@ desc = "Extracts and bags seeds from produce." icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "sextractor" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE /obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 1b5ae2e763..ac0615635a 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -4,8 +4,8 @@ #define SHEATER_COOL 3 /obj/machinery/space_heater - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE icon = 'icons/obj/atmos.dmi' icon_state = "sheater0" name = "space heater" diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index c35085382b..bc7c4fcebe 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -15,8 +15,8 @@ plane = TURF_PLANE layer = ABOVE_WINDOW_LAYER name = "status display" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE use_power = USE_POWER_IDLE idle_power_usage = 10 circuit = /obj/item/weapon/circuitboard/status_display diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index 618d6043de..477c4d7937 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -63,8 +63,8 @@ var/list/ai_status_emotions = list( icon_state = "frame" layer = ABOVE_WINDOW_LAYER name = "AI display" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE circuit = /obj/item/weapon/circuitboard/ai_status_display var/mode = 0 // 0 = Blank diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 7cad05c8cd..6b8c8747cc 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -7,8 +7,8 @@ desc = "An industrial U-Stor-It Storage unit designed to accomodate all kinds of space suits. Its on-board equipment also allows the user to decontaminate the contents through a UV-ray purging cycle. There's a warning label dangling from the control pad, reading \"STRICTLY NO BIOLOGICALS IN THE CONFINES OF THE UNIT\"." icon = 'icons/obj/suitstorage.dmi' icon_state = "suitstorage000000100" //order is: [has helmet][has suit][has human][is open][is locked][is UV cycling][is powered][is dirty/broken] [is superUVcycling] - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/mob/living/carbon/human/OCCUPANT = null var/obj/item/clothing/suit/space/SUIT = null var/suit_type = null @@ -488,8 +488,8 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) name = "suit cycler" desc = "An industrial machine for painting and refitting voidsuits." - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE icon = 'icons/obj/suitstorage.dmi' icon_state = "suitstorage000000100" diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index c4d90818fc..8c1bc87f3f 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -26,8 +26,8 @@ icon = 'icons/obj/supplybeacon.dmi' icon_state = "beacon" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE layer = MOB_LAYER - 0.1 stat = 0 diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 97ad09d2f8..07ac93b565 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -10,8 +10,8 @@ desc = "This looks suspicious..." icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/temptext = "" var/selfdestructing = 0 var/charges = 1 @@ -77,8 +77,8 @@ icon = 'icons/obj/singularity.dmi' icon_state = "beacon" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE layer = MOB_LAYER - 0.1 //so people can't hide it and it's REALLY OBVIOUS stat = 0 @@ -125,7 +125,7 @@ return if(anchored) - anchored = 0 + anchored = FALSE to_chat(user, "You unscrew the beacon from the floor.") playsound(src, W.usesound, 50, 1) disconnect_from_network() @@ -134,7 +134,7 @@ if(!connect_to_network()) to_chat(user, "This device must be placed over an exposed cable.") return - anchored = 1 + anchored = TRUE to_chat(user, "You screw the beacon to the floor and attach the cable.") playsound(src, W.usesound, 50, 1) return diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 4906c3b8c5..5a4932fd0a 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -15,8 +15,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "broadcaster" desc = "A dish-shaped machine used to broadcast processed subspace signals." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 25 machinetype = 5 @@ -135,10 +135,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept icon = 'icons/obj/stationobjs.dmi' icon_state = "allinone" desc = "A compact machine used for portable subspace telecommuniations processing." - density = 1 + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 20 - anchored = 1 + anchored = TRUE machinetype = 6 produces_heat = 0 var/intercept = 0 // if nonzero, broadcasts all messages to syndicate channel diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index fb4c92ab7b..df8188d1a3 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -250,8 +250,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "broadcast receiver" desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 600 machinetype = 1 @@ -338,8 +338,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "hub" desc = "A mighty piece of hardware used to send/receive massive amounts of data." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 1600 machinetype = 7 @@ -375,8 +375,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "relay" desc = "A mighty piece of hardware used to send massive amounts of data far away." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 600 machinetype = 8 @@ -435,8 +435,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "bus" desc = "A mighty piece of hardware used to send massive amounts of data quickly." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 1000 machinetype = 2 @@ -491,8 +491,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "processor" desc = "This machine is used to process large quantities of information." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 600 machinetype = 3 @@ -533,8 +533,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //icon = 'icons/obj/stationobjs.dmi' //VOREStation Removal - use parent icon icon_state = "comm_server" desc = "A machine used to store data and network statistics." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 300 machinetype = 4 diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 631e5b9779..505ff94947 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -122,8 +122,8 @@ /obj/machinery/teleport name = "teleport" icon = 'icons/obj/stationobjs.dmi' - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE var/lockeddown = 0 ////// diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 621feae713..43bc97c20a 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/recycling.dmi' icon_state = "separator-AO1" layer = MOB_LAYER+1 // Overhead - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/transform_dead = 0 var/transform_standing = 0 diff --git a/code/game/machinery/transportpod.dm b/code/game/machinery/transportpod.dm index 145950291c..a925a616fd 100644 --- a/code/game/machinery/transportpod.dm +++ b/code/game/machinery/transportpod.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/structures.dmi' icon_state = "borg_pod_opened" - density = 1 //thicc - anchored = 1 + density = TRUE //thicc + anchored = TRUE use_power = USE_POWER_OFF var/in_transit = 0 diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index 0f10b19e7f..694d08fa13 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -6,8 +6,8 @@ var/base_state = "syndipod_" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/vr_sleeper var/mob/living/carbon/human/occupant = null var/mob/living/carbon/human/avatar = null diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index eff908c898..b57a7a3ce8 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -3,8 +3,8 @@ desc = "Not a hiding place. Unfit for pets." icon = 'icons/obj/machines/washing_machine_vr.dmi' //VOREStation Edit icon_state = "wm_1" //VOREStation Edit - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE clicksound = "button" clickvol = 40 diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 81c720bacd..cab7caba17 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" use_power = USE_POWER_OFF - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/charges = 1 var/insisting = 0 diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm index 24bf11b49b..09992b5774 100644 --- a/code/game/mecha/combat/gorilla.dm +++ b/code/game/mecha/combat/gorilla.dm @@ -186,4 +186,4 @@ icon_state = "pzrwreck" plane = MOB_PLANE pixel_x = -16 - anchored = 1 // It's fucking huge. You aren't moving it. + anchored = TRUE // It's fucking huge. You aren't moving it. diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index dce2c3c9db..26c5798949 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -3,8 +3,8 @@ desc = "A mech recharger, built into the floor." icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_floor" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE layer = TURF_LAYER + 0.1 circuit = /obj/item/weapon/circuitboard/mech_recharger diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 34e20c2bf0..cb7cf980f4 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -3,8 +3,8 @@ icon_state = "mechfab-idle" name = "Exosuit Fabricator" desc = "A machine used for construction of mechas." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 20 active_power_usage = 5000 diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm index 12f75f1c96..5a2906dfae 100644 --- a/code/game/mecha/mech_prosthetics.dm +++ b/code/game/mecha/mech_prosthetics.dm @@ -3,8 +3,8 @@ icon_state = "prosfab" name = "Prosthetics Fabricator" desc = "A machine used for construction of prosthetics." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 20 active_power_usage = 5000 diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm index 33147e0ab1..59a611fa81 100644 --- a/code/game/mecha/mech_sensor.dm +++ b/code/game/mecha/mech_sensor.dm @@ -3,8 +3,8 @@ icon_state = "airlock_sensor_off" name = "mechatronic sensor" desc = "Regulates mech movement." - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE throwpass = 1 use_power = USE_POWER_IDLE layer = ON_WINDOW_LAYER diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index a5fee4a508..f2435132b6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -26,10 +26,10 @@ desc = "Exosuit" description_info = "Alt click to strafe." icon = 'icons/mecha/mecha.dmi' - density = 1 //Dense. To raise the heat. + density = TRUE //Dense. To raise the heat. opacity = 1 //Opaque. Menacing. - anchored = 1 //No pulling around. - unacidable = 1 //And no deleting hoomans inside + anchored = TRUE //No pulling around. + unacidable = TRUE //And no deleting hoomans inside layer = MOB_LAYER //Icon draw layer infra_luminosity = 15 //Byond implementation is bugged. var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 7ca1e753fb..5dbee5556b 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -7,8 +7,8 @@ name = "Exosuit wreckage" desc = "Remains of some unfortunate mecha. Completely unrepairable." icon = 'icons/mecha/mecha.dmi' - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE opacity = 0 var/list/welder_salvage = list(/obj/item/stack/material/plasteel,/obj/item/stack/material/steel,/obj/item/stack/rods) var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil) diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm index 5c2c2ed6ff..abc39eb5a2 100644 --- a/code/game/mecha/micro/micro.dm +++ b/code/game/mecha/micro/micro.dm @@ -10,7 +10,7 @@ /obj/mecha/micro icon = 'icons/mecha/micro.dmi' force = 10 //still a robot - anchored = 0 //light enough to push and pull, but you still can't just walk past them. Like people on non-help. + anchored = FALSE //light enough to push and pull, but you still can't just walk past them. Like people on non-help. opacity = 0 //small enough to see around, like people. step_energy_drain = 2 // They're light and small. A compact is gonna get better MPG than a truck. var/melee_cooldown = 10 diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 8f6779cd84..b0f4f4c2c1 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -1,7 +1,7 @@ /atom/movable - var/can_buckle = 0 + var/can_buckle = FALSE var/buckle_movable = 0 var/buckle_dir = 0 var/buckle_lying = -1 //bed-like behavior, forces mob.lying = buckle_lying if != -1 diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm index 4e79712598..9cdc62b40f 100644 --- a/code/game/objects/effects/alien/aliens.dm +++ b/code/game/objects/effects/alien/aliens.dm @@ -22,9 +22,9 @@ desc = "Looks like some kind of slimy growth." icon_state = "resin" - density = 1 + density = TRUE opacity = 1 - anchored = 1 + anchored = TRUE can_atmos_pass = ATMOS_PASS_NO var/health = 200 //var/mob/living/affecting = null @@ -53,7 +53,7 @@ /obj/effect/alien/resin/proc/healthcheck() if(health <=0) - density = 0 + density = FALSE qdel(src) return @@ -162,8 +162,8 @@ name = "growth" desc = "Weird organic growth." icon_state = "weeds" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE plane = TURF_PLANE layer = ABOVE_TURF_LAYER @@ -373,9 +373,9 @@ desc = "Burbling corrossive stuff. I wouldn't want to touch it." icon_state = "acid" - density = 0 + density = FALSE opacity = 0 - anchored = 1 + anchored = TRUE var/atom/target var/ticks = 0 @@ -421,4 +421,260 @@ visible_message("[src.target] begins to crumble under the acid!") spawn(rand(150, 200)) tick() +<<<<<<< HEAD //CHOMPedit old eggs removed +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) +/* + * Egg + */ +/var/const //for the status var + BURST = 0 + BURSTING = 1 + GROWING = 2 + GROWN = 3 + + MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger + MAX_GROWTH_TIME = 3000 + +/obj/effect/alien/egg + desc = "It looks like a weird egg" + name = "egg" +// icon_state = "egg_growing" // So the egg looks 'grown', even though it's not. + icon_state = "egg" + density = 0 + anchored = 1 + + var/health = 100 + var/status = BURST //can be GROWING, GROWN or BURST; all mutually exclusive + +/obj/effect/alien/egg/New() +/* + if(config.aliens_allowed) + ..() + spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME)) + Grow() + else + qdel(src) +*/ +/obj/effect/alien/egg/attack_hand(user as mob) + + var/mob/living/carbon/M = user + if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)) + return attack_hand(user) + + switch(status) + if(BURST) + to_chat(user, "You clear the hatched egg.") + qdel(src) + return +/* if(GROWING) + to_chat(user, "The child is not developed yet.") + return + if(GROWN) + to_chat(user, "You retrieve the child.") + Burst(0) + return + +/obj/effect/alien/egg/proc/GetFacehugger() // Commented out for future edit. + return locate(/obj/item/clothing/mask/facehugger) in contents + +/obj/effect/alien/egg/proc/Grow() + icon_state = "egg" +// status = GROWN + status = BURST +// new /obj/item/clothing/mask/facehugger(src) + return +*/ +/obj/effect/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining + if(status == GROWN || status == GROWING) +// var/obj/item/clothing/mask/facehugger/child = GetFacehugger() + icon_state = "egg_hatched" +/* flick("egg_opening", src) + status = BURSTING + spawn(15) + status = BURST + child.loc = get_turf(src) + + if(kill && istype(child)) + child.Die() + else + for(var/mob/M in range(1,src)) + if(CanHug(M)) + child.Attach(M) + break +*/ +/obj/effect/alien/egg/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + ..() + healthcheck() + return + +/obj/effect/alien/egg/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + user.do_attack_animation(src) + health -= damage + healthcheck() + return + +/obj/effect/alien/egg/take_damage(var/damage) + health -= damage + healthcheck() + return + + +/obj/effect/alien/egg/attackby(var/obj/item/weapon/W, var/mob/user) + if(health <= 0) + return + if(LAZYLEN(W.attack_verb)) + src.visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") + else + src.visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") + var/damage = W.force / 4.0 + + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + + if(WT.remove_fuel(0, user)) + damage = 15 + playsound(src, 'sound/items/Welder.ogg', 100, 1) + + src.health -= damage + src.healthcheck() + + +/obj/effect/alien/egg/proc/healthcheck() + if(health <= 0) + Burst() + +/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 500 + T0C) + health -= 5 + healthcheck() +======= +/* + * Egg + */ +/var/const //for the status var + BURST = 0 + BURSTING = 1 + GROWING = 2 + GROWN = 3 + + MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger + MAX_GROWTH_TIME = 3000 + +/obj/effect/alien/egg + desc = "It looks like a weird egg" + name = "egg" +// icon_state = "egg_growing" // So the egg looks 'grown', even though it's not. + icon_state = "egg" + density = FALSE + anchored = TRUE + + var/health = 100 + var/status = BURST //can be GROWING, GROWN or BURST; all mutually exclusive + +/obj/effect/alien/egg/New() +/* + if(config.aliens_allowed) + ..() + spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME)) + Grow() + else + qdel(src) +*/ +/obj/effect/alien/egg/attack_hand(user as mob) + + var/mob/living/carbon/M = user + if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)) + return attack_hand(user) + + switch(status) + if(BURST) + to_chat(user, "You clear the hatched egg.") + qdel(src) + return +/* if(GROWING) + to_chat(user, "The child is not developed yet.") + return + if(GROWN) + to_chat(user, "You retrieve the child.") + Burst(0) + return + +/obj/effect/alien/egg/proc/GetFacehugger() // Commented out for future edit. + return locate(/obj/item/clothing/mask/facehugger) in contents + +/obj/effect/alien/egg/proc/Grow() + icon_state = "egg" +// status = GROWN + status = BURST +// new /obj/item/clothing/mask/facehugger(src) + return +*/ +/obj/effect/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining + if(status == GROWN || status == GROWING) +// var/obj/item/clothing/mask/facehugger/child = GetFacehugger() + icon_state = "egg_hatched" +/* flick("egg_opening", src) + status = BURSTING + spawn(15) + status = BURST + child.loc = get_turf(src) + + if(kill && istype(child)) + child.Die() + else + for(var/mob/M in range(1,src)) + if(CanHug(M)) + child.Attach(M) + break +*/ +/obj/effect/alien/egg/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + ..() + healthcheck() + return + +/obj/effect/alien/egg/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + user.do_attack_animation(src) + health -= damage + healthcheck() + return + +/obj/effect/alien/egg/take_damage(var/damage) + health -= damage + healthcheck() + return + + +/obj/effect/alien/egg/attackby(var/obj/item/weapon/W, var/mob/user) + if(health <= 0) + return + if(LAZYLEN(W.attack_verb)) + src.visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") + else + src.visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") + var/damage = W.force / 4.0 + + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + + if(WT.remove_fuel(0, user)) + damage = 15 + playsound(src, 'sound/items/Welder.ogg', 100, 1) + + src.health -= damage + src.healthcheck() + + +/obj/effect/alien/egg/proc/healthcheck() + if(health <= 0) + Burst() + +/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 500 + T0C) + health -= 5 + healthcheck() +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 9379234ca6..0286622705 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -7,8 +7,8 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() var/id = null //id of this bump_teleporter. var/id_target = null //id of bump_teleporter which this moves you to. invisibility = 101 //nope, can't see this - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE opacity = 0 /obj/effect/bump_teleporter/New() diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index 993cbc6edc..5dad8accc4 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -6,8 +6,8 @@ name = "foam" icon_state = "foam" opacity = 0 - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE layer = OBJ_LAYER + 0.9 mouse_opacity = 0 animate_movement = 0 @@ -134,9 +134,9 @@ /obj/structure/foamedmetal icon = 'icons/effects/effects.dmi' icon_state = "metalfoam" - density = 1 + density = TRUE opacity = 1 // changed in New() - anchored = 1 + anchored = TRUE name = "foamed metal" desc = "A lightweight foamed metal wall." can_atmos_pass = ATMOS_PASS_NO @@ -147,7 +147,7 @@ update_nearby_tiles(1) /obj/structure/foamedmetal/Destroy() - density = 0 + density = FALSE update_nearby_tiles(1) return ..() diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm index deb8ec8a0c..2ea550d66d 100644 --- a/code/game/objects/effects/decals/Cleanable/fuel.dm +++ b/code/game/objects/effects/decals/Cleanable/fuel.dm @@ -4,7 +4,7 @@ icon_state = "fuel" plane = DIRTY_PLANE layer = DIRTY_LAYER - anchored = 1 + anchored = TRUE var/amount = 1 generic_filth = TRUE persistent = FALSE @@ -51,7 +51,7 @@ /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel icon_state = "mustard" - anchored = 0 + anchored = FALSE /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0) set_dir(d) //Setting this direction means you won't get torched by your own flamethrower. diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 7692dd334e..b32777c65a 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -8,8 +8,8 @@ var/global/list/image/splatter_cache=list() desc = "It's thick and gooey. Perhaps it's the chef's cooking?" var/drydesc = "It's dry and crusty. Someone is not doing their job." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE plane = BLOOD_PLANE layer = BLOOD_DECAL_LAYER icon = 'icons/effects/blood.dmi' @@ -173,8 +173,8 @@ var/global/list/image/splatter_cache=list() name = "gibs" desc = "They look bloody and gruesome." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/blood.dmi' icon_state = "gibbl5" random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6") @@ -229,8 +229,8 @@ var/global/list/image/splatter_cache=list() name = "mucus" desc = "Disgusting mucus." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/blood.dmi' icon_state = "mucus" random_icon_states = list("mucus") diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 5f980bfb3c..84f228c6ab 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -2,8 +2,8 @@ name = "clutter" desc = "Someone should clean that up." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/obj/objects.dmi' icon_state = "shards" @@ -13,7 +13,7 @@ gender = PLURAL icon = 'icons/obj/objects.dmi' icon_state = "ash" - anchored = 1 + anchored = TRUE /obj/effect/decal/cleanable/ash/attack_hand(mob/user as mob) to_chat(user, "[src] sifts through your fingers.") @@ -32,8 +32,8 @@ name = "dirt" desc = "Someone should clean that up." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/effects.dmi' icon_state = "dirt" mouse_opacity = 0 @@ -42,8 +42,8 @@ name = "flour" desc = "It's still good. Four second rule!" gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/effects.dmi' icon_state = "flour" @@ -51,8 +51,8 @@ name = "glowing goo" desc = "Jeez. I hope that's not for lunch." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE light_range = 1 icon = 'icons/effects/effects.dmi' icon_state = "greenglow" @@ -60,8 +60,8 @@ /obj/effect/decal/cleanable/cobweb name = "cobweb" desc = "Somebody should remove that." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE plane = OBJ_PLANE icon = 'icons/effects/effects.dmi' icon_state = "cobweb1" @@ -69,8 +69,8 @@ /obj/effect/decal/cleanable/molten_item name = "gooey grey mass" desc = "It looks like a melted... something." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE plane = OBJ_PLANE icon = 'icons/obj/chemical.dmi' icon_state = "molten" @@ -78,8 +78,8 @@ /obj/effect/decal/cleanable/cobweb2 name = "cobweb" desc = "Somebody should remove that." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE plane = OBJ_PLANE icon = 'icons/effects/effects.dmi' icon_state = "cobweb2" @@ -89,8 +89,8 @@ name = "vomit" desc = "Gosh, how unpleasant." gender = PLURAL - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/blood.dmi' icon_state = "vomit_1" random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4") @@ -99,32 +99,32 @@ /obj/effect/decal/cleanable/tomato_smudge name = "tomato smudge" desc = "It's red." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") /obj/effect/decal/cleanable/egg_smudge name = "smashed egg" desc = "Seems like this one won't hatch." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") /obj/effect/decal/cleanable/pie_smudge //honk name = "smashed pie" desc = "It's pie cream from a cream pie." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("smashed_pie") /obj/effect/decal/cleanable/fruit_smudge name = "smudge" desc = "Some kind of fruit smear." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/effects/blood.dmi' icon_state = "mfloor1" random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 62c8d89470..2915213d8a 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -129,7 +129,7 @@ name = "poster" desc = "A large piece of space-resistant printed paper. " icon = 'icons/obj/contraband_vr.dmi' //VOREStation Edit - anchored = 1 + anchored = TRUE var/serial_number //Will hold the value of src.loc if nobody initialises it var/poster_type //So mappers can specify a desired poster var/ruined = 0 diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 8f92ea0089..f983a480ff 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/rune.dmi' plane = DIRTY_PLANE layer = DIRTY_LAYER - anchored = 1 + anchored = TRUE /obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune") ..() diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index f3a75ce3c2..3e5c46e134 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -4,11 +4,11 @@ icon = 'icons/mob/screen1.dmi' icon_state = "arrow" plane = ABOVE_PLANE - anchored = 1 + anchored = TRUE mouse_opacity = 0 // Used for spray that you spray at walls, tables, hydrovats etc /obj/effect/decal/spraystill - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE plane = ABOVE_PLANE \ No newline at end of file diff --git a/code/game/objects/effects/decals/posters/posters.dm b/code/game/objects/effects/decals/posters/posters.dm index 5a4abf4d3f..9f3496b4ff 100644 --- a/code/game/objects/effects/decals/posters/posters.dm +++ b/code/game/objects/effects/decals/posters/posters.dm @@ -117,7 +117,7 @@ desc = "A large piece of space-resistant printed paper. " icon = 'icons/obj/contraband_vr.dmi' //VOREStation Edit icon_state = "poster" //VOREStation Edit - anchored = 1 + anchored = TRUE var/decl/poster/poster_decl = null var/target_poster_decl_path = /decl/poster var/roll_type = /obj/item/poster diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 7452586543..95adae5e4b 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -3,7 +3,7 @@ gender = PLURAL icon = 'icons/effects/blood.dmi' icon_state = "remains" - anchored = 0 + anchored = FALSE /obj/effect/decal/remains/human desc = "They look like human remains. They have a strange aura about them." diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 3665c77e91..8543c55a2b 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -11,7 +11,7 @@ would spawn and follow the beaker, even if it is carried or thrown. name = "effect" icon = 'icons/effects/effects.dmi' mouse_opacity = 0 - unacidable = 1//So effect are not targeted by alien acid. + unacidable = TRUE//So effect are not targeted by alien acid. pass_flags = PASSTABLE | PASSGRILLE blocks_emissive = EMISSIVE_BLOCK_GENERIC light_on = TRUE @@ -60,7 +60,7 @@ steam.start() -- spawns the effect name = "steam" icon = 'icons/effects/effects.dmi' icon_state = "extinguish" - density = 0 + density = FALSE /datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) if(n > 10) @@ -98,7 +98,7 @@ steam.start() -- spawns the effect name = "sparks" icon_state = "sparks" var/amount = 6.0 - anchored = 1.0 + anchored = TRUE mouse_opacity = 0 /obj/effect/effect/sparks/Initialize() @@ -168,7 +168,7 @@ steam.start() -- spawns the effect name = "smoke" icon_state = "smoke" opacity = 1 - anchored = 0.0 + anchored = FALSE mouse_opacity = 0 var/amount = 6.0 var/time_to_live = 100 @@ -422,7 +422,7 @@ steam.start() -- spawns the effect /obj/effect/effect/ion_trails name = "ion trails" icon_state = "ion_trails" - anchored = 1.0 + anchored = TRUE /datum/effect/effect/system/ion_trail_follow var/turf/oldposition diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm index 12a1e92020..449506197a 100644 --- a/code/game/objects/effects/explosion_particles.dm +++ b/code/game/objects/effects/explosion_particles.dm @@ -3,7 +3,7 @@ icon = 'icons/effects/effects.dmi' icon_state = "explosion_particle" opacity = 1 - anchored = 1 + anchored = TRUE mouse_opacity = 0 /obj/effect/expl_particles/New() @@ -37,7 +37,7 @@ icon = 'icons/effects/96x96.dmi' icon_state = "explosion" opacity = 1 - anchored = 1 + anchored = TRUE mouse_opacity = 0 pixel_x = -32 pixel_y = -32 diff --git a/code/game/objects/effects/item_pickup_ghost.dm b/code/game/objects/effects/item_pickup_ghost.dm index 0944e2753e..f23b8c8d8e 100644 --- a/code/game/objects/effects/item_pickup_ghost.dm +++ b/code/game/objects/effects/item_pickup_ghost.dm @@ -1,5 +1,5 @@ /obj/effect/temporary_effect/item_pickup_ghost - anchored = 1 + anchored = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER mouse_opacity = 0//just in case something dumb happens diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 4ec55e6571..3a60ef5480 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -2,9 +2,9 @@ name = "landmark" icon = 'icons/mob/screen1.dmi' icon_state = "x2" - anchored = 1.0 - unacidable = 1 - simulated = 0 + anchored = TRUE + unacidable = TRUE + simulated = FALSE invisibility = 100 var/delete_me = 0 @@ -24,7 +24,7 @@ return if("JoinLate") // Bit difference, since we need the spawn point to move. latejoin += src - simulated = 1 + simulated = TRUE // delete_me = 1 return if("JoinLateGateway") @@ -105,7 +105,7 @@ name = "start" icon = 'icons/mob/screen1.dmi' icon_state = "x" - anchored = 1.0 + anchored = TRUE /obj/effect/landmark/start/New() ..() @@ -128,7 +128,7 @@ name = "virtual_reality" icon = 'icons/mob/screen1.dmi' icon_state = "x" - anchored = 1.0 + anchored = TRUE /obj/effect/landmark/virtual_reality/New() ..() diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index ec45c7a089..98d378faf5 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -2,7 +2,7 @@ name = "manifest" icon = 'icons/mob/screen1.dmi' icon_state = "x" - unacidable = 1//Just to be sure. + unacidable = TRUE//Just to be sure. /obj/effect/manifest/New() diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index c49a4e0666..749797c433 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -1,14 +1,14 @@ /obj/effect/mine name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find. desc = "A small explosive land mine." - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE icon = 'icons/obj/weapons.dmi' icon_state = "uglymine" var/triggered = 0 var/smoke_strength = 3 var/obj/item/weapon/mine/mineitemtype = /obj/item/weapon/mine - var/panel_open = 0 + var/panel_open = FALSE var/datum/wires/mines/wires = null var/camo_net = FALSE // Will the mine 'cloak' on deployment? diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 725d26c1f5..cd517098dc 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -4,8 +4,8 @@ desc = "It's a ... present?" icon = 'icons/obj/items.dmi' icon_state = "strangepresent" - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE /obj/effect/temporary_effect name = "self deleting effect" diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 9fc898f8c8..c07f783e9e 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -1,6 +1,6 @@ /obj/effect/overlay name = "overlay" - unacidable = 1 + unacidable = TRUE var/i_attached//Added for possible image attachments to objects. For hallucinations and the like. /obj/effect/overlay/beam//Not actually a projectile, just an effect. @@ -18,19 +18,19 @@ name = "Palm tree" icon = 'icons/misc/beach2.dmi' icon_state = "palm1" - density = 1 + density = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER - anchored = 1 + anchored = TRUE /obj/effect/overlay/palmtree_l name = "Palm tree" icon = 'icons/misc/beach2.dmi' icon_state = "palm2" - density = 1 + density = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER - anchored = 1 + anchored = TRUE /obj/effect/overlay/coconut name = "Coconuts" @@ -47,8 +47,8 @@ name = "wallrot" desc = "Ick..." icon = 'icons/effects/wallrot.dmi' - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER mouse_opacity = 0 @@ -62,7 +62,7 @@ name = "snow" icon = 'icons/turf/overlays.dmi' icon_state = "snow" - anchored = 1 + anchored = TRUE plane = TURF_PLANE // Todo: Add a version that gradually reaccumulates over time by means of alpha transparency. -Spades diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index c549a7e3d1..ae27e75695 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -5,12 +5,12 @@ GLOBAL_LIST_BOILERPLATE(all_portals, /obj/effect/portal) desc = "Looks unstable. Best to test it with the clown." icon = 'icons/obj/stationobjs.dmi' icon_state = "portal" - density = 1 - unacidable = 1//Can't destroy energy portals. + density = TRUE + unacidable = TRUE//Can't destroy energy portals. var/failchance = 5 var/obj/item/target = null var/creator = null - anchored = 1.0 + anchored = TRUE /obj/effect/portal/Bumped(mob/M as mob|obj) if(istype(M,/mob) && !(istype(M,/mob/living))) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 6e3f224625..8eb720ea08 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -3,8 +3,8 @@ name = "web" desc = "it's stringy and sticky" icon = 'icons/effects/effects.dmi' - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE var/health = 15 //similar to weeds, but only barfed out by nurses manually @@ -137,7 +137,7 @@ name = "spiderling" desc = "It never stays still for long." icon_state = "spiderling" - anchored = 0 + anchored = FALSE layer = HIDING_LAYER health = 3 var/last_itch = 0 diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 17d9a17123..a9d1331428 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -5,7 +5,7 @@ var/stopper = 1 // stops throwers invisibility = 99 // nope cant see this shit plane = ABOVE_PLANE - anchored = 1 + anchored = TRUE icon = 'icons/mob/screen1.dmi' //VS Edit icon_state = "centermarker" //VS Edit diff --git a/code/game/objects/effects/zone_divider.dm b/code/game/objects/effects/zone_divider.dm index acab441d52..fa2ea82531 100644 --- a/code/game/objects/effects/zone_divider.dm +++ b/code/game/objects/effects/zone_divider.dm @@ -4,8 +4,8 @@ icon = 'icons/mob/screen1.dmi' icon_state = "x3" invisibility = 101 //nope, can't see this - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE opacity = 0 can_atmos_pass = ATMOS_PASS_PROC diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 19e261bf1e..8480b901a0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -49,7 +49,7 @@ var/permeability_coefficient = 1 // for chemicals/diseases var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up - var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N + var/canremove = TRUE //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N var/list/armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0) var/list/armorsoak = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0) var/list/allowed = null //suit storage stuff. diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index ab8c82f66f..b27ebc27c5 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -27,7 +27,7 @@ open_sound = 'sound/items/zip.ogg' close_sound = 'sound/items/zip.ogg' var/item_path = /obj/item/bodybag - density = 0 + density = FALSE storage_capacity = (MOB_MEDIUM * 2) - 1 var/contains_body = 0 @@ -79,7 +79,7 @@ /obj/structure/closet/body_bag/close() if(..()) - density = 0 + density = FALSE return 1 return 0 diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index b8dc28b2e9..9a9e7ea0ae 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -86,8 +86,8 @@ /obj/effect/dummy/chameleon name = "" desc = "" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/can_move = 1 var/obj/item/device/chameleon/master = null diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index 99a5bc5fdd..2b7a31eb2c 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -94,7 +94,7 @@ icon = 'icons/obj/device.dmi' icon_state = "geiger_wall" item_state = "geiger_wall" - anchored = 1 + anchored = TRUE scanning = 1 radiation_count = 0 plane = TURF_PLANE diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 809418b023..cc902d3b6d 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -38,7 +38,7 @@ to_chat(user, "No exposed cable here to attach to.") return else - anchored = 1 + anchored = TRUE mode = 1 src.visible_message("[user] attaches [src] to the cable!") playsound(src, I.usesound, 50, 1) @@ -50,7 +50,7 @@ if (mode == 2) STOP_PROCESSING(SSobj, src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite STOP_PROCESSING_POWER_OBJECT(src) - anchored = 0 + anchored = FALSE mode = 0 src.visible_message("[user] detaches [src] from the cable!") set_light(0) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index aaef5f064e..30017df795 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon icon_state = "intercom" layer = ABOVE_WINDOW_LAYER - anchored = 1 + anchored = TRUE w_class = ITEMSIZE_LARGE canhear_range = 7 //VOREStation Edit flags = NOBLOODY diff --git a/code/game/objects/items/devices/translocator_vr.dm b/code/game/objects/items/devices/translocator_vr.dm index 8586c7dbf9..cb4ebbaf0f 100644 --- a/code/game/objects/items/devices/translocator_vr.dm +++ b/code/game/objects/items/devices/translocator_vr.dm @@ -397,7 +397,7 @@ not carry this around."}, "OOC Warning", list("Take It","Leave It")) icon = 'icons/obj/radio_vr.dmi' icon_state = "floor_beacon" w_class = ITEMSIZE_HUGE - anchored = 1 + anchored = TRUE GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beacon/stationary) @@ -462,7 +462,7 @@ GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beac icon_state = "frontiertrans" beacons_left = 1 //Just one battery_lock = 1 - unacidable = 1 + unacidable = TRUE failure_chance = 0 //Percent var/phase_power = 75 diff --git a/code/game/objects/items/poi_items.dm b/code/game/objects/items/poi_items.dm index 4300eeed71..2c05f0cfca 100644 --- a/code/game/objects/items/poi_items.dm +++ b/code/game/objects/items/poi_items.dm @@ -64,7 +64,7 @@ icon = 'icons/obj/closets/poireactor.dmi' closet_appearance = null catalogue_data = list(/datum/category_item/catalogue/information/objects/oldreactor) - climbable = 0 + climbable = FALSE starts_with = list( /obj/item/weapon/fuel_assembly/deuterium = 6) @@ -110,5 +110,5 @@ icon = 'icons/obj/atmos.dmi' icon_state = "yellow-1" catalogue_data = list(/datum/category_item/catalogue/information/objects/growthcanister) - anchored = 0 - density = 1 \ No newline at end of file + anchored = FALSE + density = TRUE \ No newline at end of file diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 00fa10f137..21efc13f37 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -4,7 +4,7 @@ desc = "A shooting target." icon = 'icons/obj/objects.dmi' icon_state = "target_h" - density = 0 + density = FALSE var/hp = 1800 var/icon/virtualIcon var/list/bulletholes = list() @@ -52,7 +52,7 @@ if(stake) if(stake.pinned_target) stake.density = 1 - density = 0 + density = FALSE layer = OBJ_LAYER loc = user.loc diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 0af6443e64..4195f421e0 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -263,8 +263,8 @@ desc = "" icon = 'icons/obj/toy.dmi' icon_state = "null" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE /* * Toy swords @@ -827,8 +827,8 @@ desc = "A very generic plushie. It seems to not want to exist." icon = 'icons/obj/toy.dmi' icon_state = "ianplushie" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE var/phrase = "I don't want to exist anymore!" var/searching = FALSE var/opened = FALSE // has this been slit open? this will allow you to store an object in a plushie. @@ -1537,8 +1537,8 @@ desc = "A generic balloon. How boring." icon = 'icons/obj/toy.dmi' icon_state = "ghostballoon" - anchored = 0 - density = 0 + anchored = FALSE + density = FALSE /obj/structure/balloon/attack_hand(mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) diff --git a/code/game/objects/items/uav.dm b/code/game/objects/items/uav.dm index cd23ffc624..b1ff2723a8 100644 --- a/code/game/objects/items/uav.dm +++ b/code/game/objects/items/uav.dm @@ -12,7 +12,7 @@ var/obj/item/weapon/cell/cell var/cell_type = null //Can put a starting cell here - density = 1 //Is dense, but not anchored, so you can swap with it + density = TRUE //Is dense, but not anchored, so you can swap with it slowdown = 1.5 //Heevvee. health = 100 diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index a12ba0106a..7c0b36ccc1 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -11,8 +11,8 @@ RSF icon = 'icons/obj/tools_vr.dmi' //VOREStation Edit icon_state = "rsf" //VOREStation Edit opacity = 0 - density = 0 - anchored = 0.0 + density = FALSE + anchored = FALSE matter = list(DEFAULT_WALL_MATERIAL = 25000) var/stored_matter = 30 var/mode = 1 diff --git a/code/game/objects/items/weapons/augment_items.dm b/code/game/objects/items/weapons/augment_items.dm index c0df9c9688..bfef21ae13 100644 --- a/code/game/objects/items/weapons/augment_items.dm +++ b/code/game/objects/items/weapons/augment_items.dm @@ -18,7 +18,7 @@ w_class = ITEMSIZE_SMALL force = 15 armor_penetration = 25 - sharp = 1 + sharp = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") defend_chance = 10 projectile_parry_chance = 5 @@ -31,7 +31,7 @@ w_class = ITEMSIZE_HUGE force = 30 armor_penetration = 15 - edge = 1 + edge = TRUE pry = 1 defend_chance = 40 projectile_parry_chance = 20 \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm index 8b913eaf45..c1989902a2 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -9,8 +9,8 @@ icon = 'icons/obj/module.dmi' icon_state = "id_mod" origin_tech = list(TECH_DATA = 2) - density = 0 - anchored = 0 + density = FALSE + anchored = FALSE w_class = ITEMSIZE_SMALL force = 5.0 throwforce = 5.0 diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 2162941ac3..744cc130e2 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -6,7 +6,7 @@ w_class = ITEMSIZE_SMALL force = 2.0 det_time = null - unacidable = 1 + unacidable = TRUE var/stage = 0 var/state = 0 diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 8538980b9c..34110d5924 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -5,9 +5,9 @@ desc = "Used to implant occupants with loyalty implants." icon = 'icons/obj/machines/implantchair.dmi' icon_state = "implantchair" - density = 1 + density = TRUE opacity = 0 - anchored = 1 + anchored = TRUE var/ready = 1 var/malfunction = 0 diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm index d30f4eaa13..e6d71aebb6 100644 --- a/code/game/objects/items/weapons/material/chainsaw.dm +++ b/code/game/objects/items/weapons/material/chainsaw.dm @@ -41,8 +41,8 @@ attack_verb = list("shredded", "ripped", "torn") playsound(src, 'sound/weapons/chainsaw_startup.ogg',40,1) force = active_force - edge = 1 - sharp = 1 + edge = TRUE + sharp = TRUE on = 1 update_icon() else @@ -54,8 +54,8 @@ attack_verb = list("bluntly hit", "beat", "knocked") playsound(src, 'sound/weapons/chainsaw_turnoff.ogg',40,1) force = inactive_force - edge = 0 - sharp = 0 + edge = FALSE + sharp = FALSE on = 0 update_icon() diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 44ffb44e39..9a939bc290 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -14,8 +14,8 @@ /obj/item/weapon/material/butterfly/update_force() if(active) - edge = 1 - sharp = 1 + edge = TRUE + sharp = TRUE ..() //Updates force. throwforce = max(3,force-3) hitsound = 'sound/weapons/bladeslice.ogg' @@ -24,8 +24,8 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") else force = 3 - edge = 0 - sharp = 0 + edge = FALSE + sharp = FALSE hitsound = initial(hitsound) icon_state = initial(icon_state) w_class = initial(w_class) @@ -63,8 +63,8 @@ icon = 'icons/obj/kitchen.dmi' icon_state = "knife" desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE force_divisor = 0.15 // 9 when wielded with hardness 60 (steel) matter = list(MAT_STEEL = 12000) origin_tech = list(TECH_MATERIAL = 1) diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index 544706fb61..f300cb068e 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -8,8 +8,8 @@ throw_speed = 3 throw_range = 7 w_class = ITEMSIZE_NORMAL - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE item_icons = list( slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi', slot_r_hand_str = 'icons/mob/items/righthand_material.dmi', @@ -122,8 +122,8 @@ playsound(src, "shatter", 70, 1) dulled = 1 if(is_sharp() || has_edge()) - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE /obj/item/weapon/material/proc/repair(var/repair_amount, var/repair_time, mob/living/user) if(!fragile) diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 301fff7600..d16627d8d9 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -1,7 +1,7 @@ /obj/item/weapon/material/harpoon name = "harpoon" - sharp = 1 - edge = 0 + sharp = TRUE + edge = FALSE desc = "Tharr she blows!" icon_state = "harpoon" item_state = "harpoon" @@ -16,8 +16,8 @@ force_divisor = 0.2 // 12 with hardness 60 (steel) thrown_force_divisor = 0.75 // 15 with weight 20 (steel) w_class = ITEMSIZE_SMALL - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) attack_verb = list("chopped", "torn", "cut") applies_material_colour = 0 diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index cbf03b4535..45a83ca1da 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -6,8 +6,8 @@ desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) icon_state = "large" randpixel = 8 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE w_class = ITEMSIZE_SMALL force_divisor = 0.25 // 7.5 with hardness 30 (glass) thrown_force_divisor = 0.5 diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm index 4454b0b066..b2d26f823e 100644 --- a/code/game/objects/items/weapons/material/swords.dm +++ b/code/game/objects/items/weapons/material/swords.dm @@ -5,8 +5,8 @@ slot_flags = SLOT_BELT force_divisor = 0.7 // 42 when wielded with hardnes 60 (steel) thrown_force_divisor = 0.5 // 10 when thrown with weight 20 (steel) - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' drop_sound = 'sound/items/drop/sword.ogg' diff --git a/code/game/objects/items/weapons/material/thrown.dm b/code/game/objects/items/weapons/material/thrown.dm index 0e632de06b..dcfaad5801 100644 --- a/code/game/objects/items/weapons/material/thrown.dm +++ b/code/game/objects/items/weapons/material/thrown.dm @@ -6,8 +6,8 @@ thrown_force_divisor = 0.75 // 15 with weight 20 (steel) throw_speed = 10 throw_range = 15 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /obj/item/weapon/material/star/New() ..() diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 00f2d406a0..289efe0774 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -90,9 +90,19 @@ unwielded_force_divisor = 0.25 force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor dulled_divisor = 0.75 //Still metal on a stick +<<<<<<< HEAD sharp = 1 edge = 1 w_class = ITEMSIZE_HUGE //CHOMP Edit +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) + sharp = 1 + edge = 1 + w_class = ITEMSIZE_LARGE +======= + sharp = TRUE + edge = TRUE + w_class = ITEMSIZE_LARGE +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) slot_flags = SLOT_BACK force_wielded = 30 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") @@ -153,8 +163,8 @@ unwielded_force_divisor = 0.375 thrown_force_divisor = 1.5 // 22.5 when thrown with weight 15 (glass) throw_speed = 3 - edge = 0 - sharp = 1 + edge = FALSE + sharp = TRUE hitsound = 'sound/weapons/bladeslice.ogg' mob_throw_hit_sound = 'sound/weapons/pierce.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") @@ -176,8 +186,8 @@ thrown_force_divisor = 1 default_material = "MAT_STEEL" fragile = 0 - sharp = 1 - edge = 0 + sharp = TRUE + edge = FALSE /obj/item/weapon/material/twohanded/riding_crop name = "riding crop" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 45d01fa99d..a3d56da488 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -4,8 +4,8 @@ var/active_throwforce var/active_w_class var/active_embed_chance = 0 //In the off chance one of these is supposed to embed, you can just tweak this var - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE armor_penetration = 50 flags = NOCONDUCT | NOBLOODY var/lrange = 2 @@ -54,8 +54,8 @@ embed_chance = active_embed_chance force = active_force throwforce = active_throwforce - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE w_class = active_w_class playsound(src, 'sound/weapons/saberon.ogg', 50, 1) update_icon() @@ -224,8 +224,8 @@ w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4) attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE can_cleave = TRUE /obj/item/weapon/melee/energy/axe/activate(mob/living/user) @@ -276,8 +276,8 @@ w_class = ITEMSIZE_SMALL flags = NOBLOODY origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4) - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE colorable = TRUE drop_sound = 'sound/items/drop/sword.ogg' pickup_sound = 'sound/items/pickup/sword.ogg' @@ -358,8 +358,8 @@ active_force = 5 active_throwforce = 3 active_embed_chance = 0 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE armor_penetration = 0 flags = NOBLOODY lrange = 2 @@ -427,9 +427,9 @@ item_state = "blade" force = 40 //Normal attacks deal very high damage - about the same as wielded fire axe armor_penetration = 100 - sharp = 1 - edge = 1 - anchored = 1 // Never spawned outside of inventory, should be fine. + sharp = TRUE + edge = TRUE + anchored = TRUE // Never spawned outside of inventory, should be fine. throwforce = 1 //Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 @@ -514,8 +514,8 @@ desc = "Concentrated energy forming a sharp tip at the end of a long rod." icon_state = "espear" armor_penetration = 75 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE force = 5 throwforce = 10 throw_speed = 7 diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 781ea5a463..54413bb6e0 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -59,8 +59,8 @@ force = 30 throwforce = 10 w_class = ITEMSIZE_NORMAL - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' can_speak = 1 diff --git a/code/game/objects/items/weapons/melee/misc_vr.dm b/code/game/objects/items/weapons/melee/misc_vr.dm index fd228ba9c4..b14a36e1f4 100644 --- a/code/game/objects/items/weapons/melee/misc_vr.dm +++ b/code/game/objects/items/weapons/melee/misc_vr.dm @@ -10,7 +10,7 @@ force = 15 throwforce = 10 w_class = ITEMSIZE_NORMAL - sharp = 1 - edge = 0 + sharp = TRUE + edge = FALSE attack_verb = list("stabbed", "lunged at", "dextrously struck", "sliced", "lacerated", "impaled", "diced", "charioted") hitsound = 'sound/weapons/bladeslice.ogg' \ No newline at end of file diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index 2e2ea6aebc..95de86abee 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/janitor.dmi' icon_state = "mop" force = 3 - anchored = 1 // Never spawned outside of inventory, should be fine. + anchored = TRUE // Never spawned outside of inventory, should be fine. throwforce = 1 //Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 91c173d530..80ec8d7f7c 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -14,7 +14,7 @@ var/global/list/cached_icons = list() amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,60) volume = 60 - unacidable = 0 + unacidable = FALSE flags = OPENCONTAINER var/paint_type = "red" diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index f9b0c11a17..cb00c93fd0 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -32,7 +32,7 @@ var/list/tape_roll_applications = list() /obj/item/tape name = "tape" icon = 'icons/policetape.dmi' - anchored = 1 + anchored = TRUE layer = WINDOW_LAYER var/lifted = 0 var/crumpled = 0 diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 5e648e967c..f5ee30319b 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -21,7 +21,7 @@ allow_quick_gather = 1 allow_quick_empty = 1 display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients - use_to_pickup = 1 + use_to_pickup = TRUE slot_flags = SLOT_BELT drop_sound = 'sound/items/drop/backpack.ogg' pickup_sound = 'sound/items/pickup/backpack.ogg' diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 2d905dcecc..2ecced653a 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -497,7 +497,7 @@ storage_slots = 24 can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb) max_storage_space = ITEMSIZE_COST_SMALL * 24 //holds 24 items of w_class 2 - use_to_pickup = 1 // for picking up broken bulbs, not that most people will try + use_to_pickup = TRUE // for picking up broken bulbs, not that most people will try /obj/item/weapon/storage/box/lights/bulbs starts_with = list(/obj/item/weapon/light/bulb = 24) @@ -525,7 +525,7 @@ max_w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/organ) max_storage_space = ITEMSIZE_COST_NORMAL * 5 // Formally 21. Odd numbers are bad. - use_to_pickup = 1 // for picking up broken bulbs, not that most people will try + use_to_pickup = TRUE // for picking up broken bulbs, not that most people will try /obj/item/weapon/storage/box/freezer/red icon_state = "portafreezer_red" diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 2bc47b43f5..84c1637a3e 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -182,7 +182,7 @@ can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) allow_quick_gather = 1 allow_quick_empty = 1 - use_to_pickup = 1 + use_to_pickup = TRUE use_sound = 'sound/items/storage/pillbottle.ogg' max_storage_space = ITEMSIZE_COST_TINY * 14 max_w_class = ITEMSIZE_TINY diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index e8e2cc59e4..db6b304f31 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -14,7 +14,7 @@ max_w_class = ITEMSIZE_LARGE max_storage_space = ITEMSIZE_COST_NORMAL * 8 storage_slots = 20 - use_to_pickup = 1 + use_to_pickup = TRUE allow_quick_empty = 1 allow_quick_gather = 1 collection_mode = 1 @@ -79,7 +79,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "offhand" name = "second hand" - use_to_pickup = 0 + use_to_pickup = FALSE /obj/item/weapon/storage/laundry_basket/offhand/dropped(mob/user as mob) user.drop_from_inventory(linked) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 957a3c73f6..36093fa2cf 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -186,8 +186,8 @@ force = 8.0 w_class = ITEMSIZE_NO_CONTAINER max_w_class = ITEMSIZE_LARGE // This was 8 previously... - anchored = 1.0 - density = 0 + anchored = TRUE + density = FALSE cant_hold = list(/obj/item/weapon/storage/secure/briefcase) starts_with = list( /obj/item/weapon/paper, diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 360cefe280..7b9521c41f 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -6,8 +6,8 @@ item_state = "baton" slot_flags = SLOT_BELT force = 15 - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE throwforce = 7 flags = NOCONDUCT w_class = ITEMSIZE_NORMAL diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 89e150330a..61a7448334 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -98,8 +98,8 @@ desc = "Cut, cut, and once more cut." icon_state = "scalpel" force = 10.0 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS throwforce = 5.0 @@ -172,8 +172,8 @@ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) matter = list(MAT_STEEL = 20000,MAT_GLASS = 10000) attack_verb = list("attacked", "slashed", "sawed", "cut") - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /obj/item/weapon/surgical/circular_saw/manager name = "energetic bone diverter" diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm index d1be9f9ae6..7b673c0b7e 100644 --- a/code/game/objects/items/weapons/tools/screwdriver.dm +++ b/code/game/objects/items/weapons/tools/screwdriver.dm @@ -19,7 +19,7 @@ pickup_sound = 'sound/items/pickup/screwdriver.ogg' matter = list(MAT_STEEL = 75) attack_verb = list("stabbed") - sharp = 1 + sharp = TRUE toolspeed = 1 tool_qualities = list(TOOL_SCREWDRIVER) var/random_color = TRUE diff --git a/code/game/objects/items/weapons/tools/wirecutters.dm b/code/game/objects/items/weapons/tools/wirecutters.dm index ea9a0c47d5..a8f64d4f10 100644 --- a/code/game/objects/items/weapons/tools/wirecutters.dm +++ b/code/game/objects/items/weapons/tools/wirecutters.dm @@ -19,8 +19,8 @@ usesound = 'sound/items/wirecutter.ogg' drop_sound = 'sound/items/drop/wirecutter.ogg' pickup_sound = 'sound/items/pickup/wirecutter.ogg' - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE toolspeed = 1 tool_qualities = list(TOOL_WIRECUTTER) var/random_color = TRUE diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index d3f9ce5ed2..0cf9db2b57 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -50,7 +50,7 @@ deployed = 1 user.drop_from_inventory(src) update_icon() - anchored = 1 + anchored = TRUE /obj/item/weapon/beartrap/attack_hand(mob/user as mob) if(has_buckled_mobs() && can_use(user)) @@ -63,7 +63,7 @@ user.visible_message("[victim] has been freed from \the [src] by [user].") for(var/A in buckled_mobs) unbuckle_mob(A) - anchored = 0 + anchored = FALSE else if(deployed && can_use(user)) user.visible_message( "[user] starts to disarm \the [src].", @@ -78,7 +78,7 @@ "You have disarmed \the [src]!" ) deployed = 0 - anchored = 0 + anchored = FALSE update_icon() else ..() @@ -116,7 +116,7 @@ //trap the victim in place set_dir(L.dir) - can_buckle = 1 + can_buckle = TRUE buckle_mob(L) L.Stun(stun_length) to_chat(L, "The steel jaws of \the [src] bite into you, trapping you in place!") @@ -137,7 +137,7 @@ ) attack_mob(L) if(!has_buckled_mobs()) - anchored = 0 + anchored = FALSE deployed = 0 update_icon() ..() @@ -210,7 +210,7 @@ "[user] has collected \the [src].", "You have collected \the [src]!" ) - anchored = 0 + anchored = FALSE update_icon() else ..() @@ -235,7 +235,7 @@ playsound(src, 'sound/items/Wirecutter.ogg',40, 1) user.drop_from_inventory(src) forceMove(get_turf(src)) - anchored = 1 + anchored = TRUE update_icon() /obj/item/weapon/material/barbedwire/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index be45bfa822..28e38a0d70 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -94,12 +94,12 @@ icon = 'icons/effects/effects.dmi' icon_state = "energynet" - density = 1 + density = TRUE opacity = 0 mouse_opacity = 1 - anchored = 0 + anchored = FALSE - can_buckle = 1 + can_buckle = TRUE buckle_lying = 0 buckle_dir = SOUTH diff --git a/code/game/objects/mob_spawner_vr.dm b/code/game/objects/mob_spawner_vr.dm index 1b17bda2e2..3693bf85e2 100644 --- a/code/game/objects/mob_spawner_vr.dm +++ b/code/game/objects/mob_spawner_vr.dm @@ -3,7 +3,7 @@ desc = "This shouldn't be seen, yell at a dev." icon = 'icons/effects/effects.dmi' icon_state = "rift" - anchored = 1 + anchored = TRUE var/last_spawn = 0 var/spawn_delay = 10 MINUTES @@ -153,7 +153,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are. mob_faction = "wild animal" total_spawns = -1 destructible = 0 - anchored = 1 + anchored = TRUE invisibility = 101 spawn_types = list( /mob/living/simple_mob/animal/passive/gaslamp = 20, @@ -171,7 +171,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are. total_spawns = -1 destructible = 1 health = 50 - anchored = 1 + anchored = TRUE icon = 'icons/mob/actions.dmi' icon_state = "alien_egg" spawn_types = list( @@ -190,7 +190,7 @@ It also makes it so a ghost wont know where all the goodies/mobs are. total_spawns = 1 destructible = 1 health = 50 - anchored = 1 + anchored = TRUE icon = 'icons/mob/actions.dmi' icon_state = "alien_egg" spawn_types = list( diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 9f16a6b9c9..ac7fe2b209 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -5,12 +5,12 @@ //Used to store information about the contents of the object. var/list/matter var/w_class // Size of the object. - var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj. + var/unacidable = FALSE //universal "unacidabliness" var, here so you can use it in any obj. animate_movement = 2 var/throwforce = 1 var/catchable = 1 // can it be caught on throws/flying? - var/sharp = 0 // whether this object cuts - var/edge = 0 // whether this object is more likely to dismember + var/sharp = FALSE // whether this object cuts + var/edge = FALSE // whether this object is more likely to dismember var/pry = 0 //Used in attackby() to open doors var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = "brute" diff --git a/code/game/objects/structures/barricades.dm b/code/game/objects/structures/barricades.dm index c60c48375e..098b126d00 100644 --- a/code/game/objects/structures/barricades.dm +++ b/code/game/objects/structures/barricades.dm @@ -4,8 +4,8 @@ desc = "This space is blocked off by a barricade." icon = 'icons/obj/structures.dmi' icon_state = "barricade" - anchored = 1.0 - density = 1.0 + anchored = TRUE + density = TRUE var/health = 100 var/maxhealth = 100 var/datum/material/material diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index f064f983b7..e692170fc8 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -4,7 +4,7 @@ plane = ABOVE_PLANE icon_state = "empty" appearance_flags = 0 - anchored = 1 + anchored = TRUE var/cult = 0 /obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index c7bab19f0f..50869c4497 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -164,7 +164,7 @@ LINEN BINS desc = "A linen bin. It looks rather cosy." icon = 'icons/obj/structures.dmi' icon_state = "linenbin-full" - anchored = 1 + anchored = TRUE var/amount = 20 var/list/sheets = list() var/obj/item/hidden = null diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index e77abbaa6f..abd0665898 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -5,8 +5,8 @@ icon_state = "catwalk" plane = DECAL_PLANE layer = DECAL_LAYER - density = 0 - anchored = 1.0 + density = FALSE + anchored = TRUE var/hatch_open = FALSE var/plating_color = null var/obj/item/stack/tile/plated_tile = null @@ -137,8 +137,8 @@ name = "plated catwalk spawner" icon = 'icons/turf/catwalks.dmi' icon_state = "catwalk_plated" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE var/activated = FALSE plane = DECAL_PLANE layer = DECAL_LAYER diff --git a/code/game/objects/structures/crates_lockers/__closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm index f111d19196..fb27ea6977 100644 --- a/code/game/objects/structures/crates_lockers/__closets.dm +++ b/code/game/objects/structures/crates_lockers/__closets.dm @@ -4,7 +4,7 @@ desc = "It's a basic storage unit." icon = 'icons/obj/closets/bases/closet.dmi' icon_state = "base" - density = 1 + density = TRUE w_class = ITEMSIZE_HUGE layer = UNDER_JUNK_LAYER blocks_emissive = EMISSIVE_BLOCK_GENERIC diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 14e1c276b2..3865641552 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -16,7 +16,7 @@ icon_state = "closed_unlocked" seal_tool = null breakout_sound = 'sound/weapons/thudswoosh.ogg' - anchored = 1 + anchored = TRUE max_closets = 1 opened = 1 closet_appearance = null // Special icon for us diff --git a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm index dabc8fd88b..19d3f8b452 100644 --- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm @@ -3,7 +3,7 @@ desc = "It's an egg; it's smooth to the touch." //This is the default egg. icon = 'icons/obj/egg_vr.dmi' icon_state = "egg" - density = 0 //Just in case there's a lot of eggs, so it doesn't block hallways/areas. + density = FALSE //Just in case there's a lot of eggs, so it doesn't block hallways/areas. var/icon_closed = "egg" var/icon_opened = "egg_open" var/icon_locked = "egg" diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 0c91f7aecf..6ba78a90a0 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -12,7 +12,7 @@ name = "administrative supply closet" desc = "It's a storage unit for things that have no right being here." closet_appearance = /decl/closet_appearance/tactical - anchored = 0 + anchored = FALSE /obj/structure/closet/gimmick/russian name = "russian surplus closet" @@ -44,7 +44,7 @@ name = "\improper Thunderdome closet" desc = "Everything you need!" closet_appearance = /decl/closet_appearance/thunderdomered - anchored = 1 + anchored = TRUE /obj/structure/closet/thunderdome/tdred name = "red-team Thunderdome closet" diff --git a/code/game/objects/structures/crates_lockers/closets/misc_vr.dm b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm index 4e86c416d0..15249c0b81 100644 --- a/code/game/objects/structures/crates_lockers/closets/misc_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm @@ -220,8 +220,8 @@ desc = "It's wall-mounted storage unit for an AutoLok suit." icon = 'icons/obj/closets/bases/wall_double.dmi' closet_appearance = /decl/closet_appearance/wall_double/autolok - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE wall_mounted = 1 store_mobs = 0 @@ -236,8 +236,8 @@ desc = "It's wall-mounted storage unit for an emergency suit." icon = 'icons/obj/closets/bases/wall.dmi' closet_appearance = /decl/closet_appearance/wall/emergency - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE wall_mounted = 1 store_mobs = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index a1412ba7a9..b6021a86c9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -225,8 +225,8 @@ desc = "It's a secure wall-mounted storage unit for first aid supplies." plane = TURF_PLANE layer = ABOVE_TURF_LAYER - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE wall_mounted = 1 store_mobs = 0 req_access = list(access_medical_equip) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 9fae830b44..85b9367b7d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -3,7 +3,7 @@ desc = "It's an immobile card-locked storage unit." icon = 'icons/obj/closet.dmi' icon_state = "secure1" - density = 1 + density = TRUE opened = 0 var/locked = 1 var/broken = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 7d75d736cc..bb7b05c7b3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -271,7 +271,7 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br name = "brig locker" req_access = list(access_brig) closet_appearance = /decl/closet_appearance/secure_closet/brig - anchored = 1 + anchored = TRUE var/id = null starts_with = list( @@ -281,7 +281,7 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br /obj/structure/closet/secure_closet/posters name = "morale storage" req_access = list(access_security) - anchored = 1 + anchored = TRUE starts_with = list( /obj/item/poster/nanotrasen, @@ -308,7 +308,7 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br name = "wall locker" req_access = list(access_security) closet_appearance = /decl/closet_appearance/wall - density = 1 + density = TRUE //too small to put a man in large = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index dc6e92355d..253e93ff71 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -3,8 +3,8 @@ desc = "An incredibly lifelike marble carving" icon = 'icons/obj/statue.dmi' icon_state = "human_male" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE health = 0 //destroying the statue kills the mob within blocks_emissive = EMISSIVE_BLOCK_UNIQUE var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 8ccf80bf18..07c5276a6f 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -187,8 +187,8 @@ closet_appearance = /decl/closet_appearance/wall/hydrant plane = TURF_PLANE layer = ABOVE_TURF_LAYER - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE wall_mounted = 1 store_mobs = 0 @@ -207,7 +207,7 @@ name = "first-aid closet" desc = "It's wall-mounted storage unit for first aid supplies." closet_appearance = /decl/closet_appearance/wall/medical - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE wall_mounted = 1 store_mobs = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index 60ec9ab4fb..f140e7380f 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -6,8 +6,8 @@ name = "Wall Locker" icon = 'icons/obj/closets/bases/wall.dmi' closet_appearance = /decl/closet_appearance/wall - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE store_mobs = 0 wall_mounted = 1 @@ -85,8 +85,8 @@ name = "Wall Cabinet" icon = 'icons/obj/closets/bases/wall_double.dmi' closet_appearance = /decl/closet_appearance/wall_double - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE store_mobs = 0 wall_mounted = 1 plane = TURF_PLANE @@ -113,8 +113,8 @@ name = "Kitchen Cabinet" icon = 'icons/obj/closets/bases/wall_double.dmi' closet_appearance = /decl/closet_appearance/wall_double/kitchen - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE /obj/structure/closet/walllocker_double/kitchen/north pixel_y = 32 @@ -157,8 +157,8 @@ name = "fire-safety closet" desc = "It's a storage cabinet packed with fire-fighting supplies." closet_appearance = /decl/closet_appearance/wall_double/fire_safety - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE starts_with = list( /obj/item/clothing/suit/fire/firefighter, diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 76ca759c59..eec6a8d892 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -5,7 +5,7 @@ desc = "A rectangular steel crate." icon = 'icons/obj/closets/bases/crate.dmi' closet_appearance = /decl/closet_appearance/crate - climbable = 1 + climbable = TRUE dir = 4 //Spawn facing 'forward' by default. var/points_per_crate = 5 var/rigged = 0 diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 7c8f95ea43..1ceded17fd 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -3,7 +3,7 @@ desc = "A hefty wooden crate." icon = 'icons/obj/storage.dmi' icon_state = "densecrate" - density = 1 + density = TRUE var/list/starts_with /obj/structure/largecrate/Initialize() diff --git a/code/game/objects/structures/crates_lockers/vehiclecage.dm b/code/game/objects/structures/crates_lockers/vehiclecage.dm index 31862846ff..c3a04e9267 100644 --- a/code/game/objects/structures/crates_lockers/vehiclecage.dm +++ b/code/game/objects/structures/crates_lockers/vehiclecage.dm @@ -3,7 +3,7 @@ desc = "A large metal lattice that seems to exist solely to annoy consumers." icon = 'icons/obj/storage.dmi' icon_state = "vehicle_cage" - density = 1 + density = TRUE var/obj/vehicle/my_vehicle var/my_vehicle_type var/paint_color = "#666666" diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 13530d731a..b8c5d95cbf 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -6,7 +6,7 @@ plane = MOB_PLANE layer = ABOVE_MOB_LAYER opacity = 1 - density = 0 + density = FALSE /obj/structure/curtain/open icon_state = "open" diff --git a/code/game/objects/structures/dancepole_vr.dm b/code/game/objects/structures/dancepole_vr.dm index 0c9397142d..3a548f1133 100644 --- a/code/game/objects/structures/dancepole_vr.dm +++ b/code/game/objects/structures/dancepole_vr.dm @@ -4,8 +4,8 @@ desc = "Engineered for your entertainment" icon = 'icons/obj/objects_vr.dmi' icon_state = "dancepole" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE /obj/structure/dancepole/attackby(var/obj/item/O as obj, var/mob/user as mob) if(O.is_screwdriver()) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 0f18d967b3..c7e6ffd693 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -3,9 +3,9 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "glassbox1" desc = "A display case for prized possessions. It taunts you to kick it." - density = 1 - anchored = 1 - unacidable = 1//Dissolving the case would also delete the gun. + density = TRUE + anchored = TRUE + unacidable = TRUE//Dissolving the case would also delete the gun. var/health = 30 var/occupied = 1 var/destroyed = 0 diff --git a/code/game/objects/structures/dogbed.dm b/code/game/objects/structures/dogbed.dm index bf9a65f8eb..b8ad1095fd 100644 --- a/code/game/objects/structures/dogbed.dm +++ b/code/game/objects/structures/dogbed.dm @@ -3,6 +3,6 @@ desc = "A bed made especially for dogs, or other similarly sized pets." icon = 'icons/obj/furniture.dmi' icon_state = "dogbed" - can_buckle = 1 + can_buckle = TRUE buckle_dir = SOUTH buckle_lying = 1 \ No newline at end of file diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 2b57235299..108e824616 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -2,8 +2,8 @@ name = "airlock assembly" icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_as_0" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE w_class = ITEMSIZE_HUGE var/state = 0 var/base_icon_state = "" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index a5717bdf6e..fdfae03727 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_closed" layer = ABOVE_WINDOW_LAYER - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE var/obj/item/weapon/extinguisher/has_extinguisher var/opened = 0 diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index f584fd8838..29159503ab 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -6,8 +6,8 @@ icon = 'icons/obj/closet.dmi' //Not bothering to move icons out for now. But its dumb still. icon_state = "fireaxe1000" layer = ABOVE_WINDOW_LAYER - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE var/open = 0 var/hitstaken = 0 var/locked = 1 diff --git a/code/game/objects/structures/fitness.dm b/code/game/objects/structures/fitness.dm index f41fbfa8cf..f84c9508e7 100644 --- a/code/game/objects/structures/fitness.dm +++ b/code/game/objects/structures/fitness.dm @@ -1,13 +1,13 @@ /obj/structure/fitness icon = 'icons/obj/stationobjs.dmi' - anchored = 1 + anchored = TRUE var/being_used = 0 /obj/structure/fitness/punchingbag name = "punching bag" desc = "A punching bag." icon_state = "punchingbag" - density = 1 + density = TRUE var/list/hit_message = list("hit", "punch", "kick", "robust") /obj/structure/fitness/punchingbag/attack_hand(var/mob/living/carbon/human/user) diff --git a/code/game/objects/structures/fitness_vr.dm b/code/game/objects/structures/fitness_vr.dm index 99978fe27c..960becca41 100644 --- a/code/game/objects/structures/fitness_vr.dm +++ b/code/game/objects/structures/fitness_vr.dm @@ -3,11 +3,11 @@ desc = "Firm yet springy, perhaps this could be useful!" icon = 'icons/obj/fitness_vr.dmi' icon_state = "ropes" - density = 1 + density = TRUE throwpass = 1 - climbable = 1 + climbable = TRUE layer = WINDOW_LAYER - anchored = 1 + anchored = TRUE flags = ON_BORDER /obj/structure/fitness/boxing_ropes/CanPass(atom/movable/mover, turf/target) //sets it so that players can enter turf from all directions except the main direction. if(istype(mover) && mover.checkpass(PASSTABLE)) @@ -60,12 +60,12 @@ desc = "Firm yet springy, perhaps this could be useful!" icon = 'icons/obj/fitness_vr.dmi' icon_state = "ropes" - density = 1 + density = TRUE throwpass = 1 - climbable = 1 + climbable = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER - anchored = 1 + anchored = TRUE flags = ON_BORDER /obj/structure/fitness/boxing_ropes_bottom/CanPass(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSTABLE)) @@ -120,11 +120,11 @@ desc = "A sturdy post that looks like it could support even the most heaviest of heavy weights!" icon = 'icons/obj/fitness_vr.dmi' icon_state = "turnbuckle" - density = 1 + density = TRUE throwpass = 1 - climbable = 1 + climbable = TRUE layer = WINDOW_LAYER - anchored = 1 + anchored = TRUE flags = ON_BORDER /obj/structure/fitness/boxing_turnbuckle/CanPass(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSTABLE)) diff --git a/code/game/objects/structures/flora/flora_vr.dm b/code/game/objects/structures/flora/flora_vr.dm index b7f722324c..58ea426d97 100644 --- a/code/game/objects/structures/flora/flora_vr.dm +++ b/code/game/objects/structures/flora/flora_vr.dm @@ -79,14 +79,14 @@ icon = 'icons/obj/flora/amayastuff.dmi' desc = "Small stones sit beside this large boulder. Moss grows on the top of each of them." icon_state = "bigboulder1" - density = 1 + density = TRUE /obj/structure/flora/bboulder2 name = "jagged large boulder" icon = 'icons/obj/flora/amayastuff.dmi' desc = "This boulder has had plates broken off it. Moss grows in the cracks and across the top." icon_state = "bigboulder2" - density = 1 + density = TRUE /obj/structure/flora/rocks1 name = "rocks" diff --git a/code/game/objects/structures/flora/grass.dm b/code/game/objects/structures/flora/grass.dm index 92717f4beb..0ed4e9c19c 100644 --- a/code/game/objects/structures/flora/grass.dm +++ b/code/game/objects/structures/flora/grass.dm @@ -2,7 +2,7 @@ /obj/structure/flora/grass name = "grass" icon = 'icons/obj/flora/snowflora.dmi' - anchored = 1 + anchored = TRUE /obj/structure/flora/grass/brown icon_state = "snowgrass1bb" diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index 9a885a68f7..0a0811b7c4 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -1,8 +1,8 @@ //trees /obj/structure/flora/tree name = "tree" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE pixel_x = -16 plane = MOB_PLANE // You know what, let's play it safe. layer = ABOVE_MOB_LAYER diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 39d30dabfb..9b006ee27f 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -1,7 +1,7 @@ /obj/structure/girder icon_state = "girder" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE plane = PLATING_PLANE w_class = ITEMSIZE_HUGE var/state = 0 @@ -68,7 +68,7 @@ /obj/structure/girder/displaced icon_state = "displaced" - anchored = 0 + anchored = FALSE health = 50 cover = 25 @@ -79,7 +79,7 @@ /obj/structure/girder/proc/displace() name = "displaced [girder_material.display_name] [initial(name)]" icon_state = "displaced" - anchored = 0 + anchored = FALSE health = (displaced_health - round(current_damage / 4)) cover = 25 @@ -134,7 +134,7 @@ /obj/structure/girder/proc/reset_girder() name = "[girder_material.display_name] [initial(name)]" - anchored = 1 + anchored = TRUE cover = initial(cover) health = min(max_health - current_damage,max_health) state = 0 diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm index ff02bb4ae2..af5c170899 100644 --- a/code/game/objects/structures/gravemarker.dm +++ b/code/game/objects/structures/gravemarker.dm @@ -3,10 +3,10 @@ desc = "An object used in marking graves." icon_state = "gravemarker" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE throwpass = 1 - climbable = 1 + climbable = TRUE layer = ABOVE_JUNK_LAYER diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 18a07462fc..ea1a9346c1 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -3,8 +3,8 @@ desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." icon = 'icons/obj/structures_vr.dmi' // VOREStation Edit - New icons icon_state = "grille" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE pressure_resistance = 5*ONE_ATMOSPHERE layer = TABLE_LAYER explosion_resistance = 1 @@ -167,7 +167,7 @@ /obj/structure/grille/proc/healthcheck() if(health <= 0) if(!destroyed) - density = 0 + density = FALSE destroyed = 1 update_icon() new /obj/item/stack/rods(get_turf(src)) @@ -223,7 +223,7 @@ /obj/structure/grille/broken destroyed = 1 icon_state = "grille-b" - density = 0 + density = FALSE /obj/structure/grille/broken/New() ..() diff --git a/code/game/objects/structures/handrail.dm b/code/game/objects/structures/handrail.dm index 8519cb4e30..6a48e94654 100644 --- a/code/game/objects/structures/handrail.dm +++ b/code/game/objects/structures/handrail.dm @@ -3,6 +3,6 @@ icon = 'icons/obj/handrail.dmi' icon_state = "handrail" desc = "A safety railing with buckles to secure yourself to when floor isn't stable enough." - density = 0 - anchored = 1 - can_buckle = 1 + density = FALSE + anchored = TRUE + can_buckle = TRUE diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 8a6377d0fe..92dc20cec6 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -23,8 +23,8 @@ /obj/structure/inflatable name = "inflatable wall" desc = "An inflated membrane. Do not puncture." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE opacity = 0 can_atmos_pass = ATMOS_PASS_DENSITY @@ -154,8 +154,8 @@ /obj/structure/inflatable/door //Based on mineral door code name = "inflatable door" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE opacity = 0 icon = 'icons/obj/inflatable.dmi' @@ -204,7 +204,7 @@ isSwitchingStates = 1 flick("door_opening",src) sleep(10) - density = 0 + density = FALSE opacity = 0 state = 1 update_icon() @@ -214,7 +214,7 @@ isSwitchingStates = 1 flick("door_closing",src) sleep(10) - density = 1 + density = TRUE opacity = 0 state = 0 update_icon() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index fba31409f5..87f568f703 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -6,8 +6,8 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) description_info = "You can use alt-click while holding a mop to stow the mop. Alt-click holding a reagent container will empty the contents into the bucket without trying to put the container in any attached trash bag." icon = 'icons/obj/janitor.dmi' icon_state = "cart" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE flags = OPENCONTAINER climbable = TRUE //copypaste sorry @@ -374,8 +374,8 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) name = "janicart" icon = 'icons/obj/vehicles.dmi' icon_state = "pussywagon" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE flags = OPENCONTAINER //copypaste sorry var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite diff --git a/code/game/objects/structures/kitchen_foodcart_vr.dm b/code/game/objects/structures/kitchen_foodcart_vr.dm index 04c3f1de5f..4fb56b038b 100644 --- a/code/game/objects/structures/kitchen_foodcart_vr.dm +++ b/code/game/objects/structures/kitchen_foodcart_vr.dm @@ -3,9 +3,9 @@ icon = 'icons/obj/kitchen_vr.dmi' icon_state = "foodcart-0" desc = "The ultimate in food transport! When opened you notice two compartments with odd blue glows to them. One feels very warm, while the other is very cold." - anchored = 0 + anchored = FALSE opacity = 0 - density = 1 + density = TRUE /obj/structure/foodcart/Initialize() . = ..() diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 53323bb4b9..48e9e113e8 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -5,8 +5,8 @@ icon = 'icons/obj/kitchen.dmi' icon_state = "spike" desc = "A spike for collecting meat from animals." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/meat = 0 var/occupied var/meat_type diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 8c1879ec80..30999cd3d6 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -3,8 +3,8 @@ desc = "A lightweight support lattice." icon = 'icons/obj/structures.dmi' icon_state = "latticefull" - density = 0 - anchored = 1.0 + density = FALSE + anchored = TRUE w_class = ITEMSIZE_NORMAL plane = PLATING_PLANE diff --git a/code/game/objects/structures/ledges.dm b/code/game/objects/structures/ledges.dm index cf7c88fc48..b90e406cb2 100644 --- a/code/game/objects/structures/ledges.dm +++ b/code/game/objects/structures/ledges.dm @@ -2,10 +2,10 @@ name = "rock ledge" desc = "An easily scaleable rocky ledge." icon = 'icons/obj/ledges.dmi' - density = 1 + density = TRUE throwpass = 1 - climbable = 1 - anchored = 1 + climbable = TRUE + anchored = TRUE var/solidledge = 1 flags = ON_BORDER layer = STAIRS_LAYER @@ -17,23 +17,23 @@ name = "rock ledge" desc = "An easily scaleable rocky ledge." icon = 'icons/obj/ledges.dmi' - density = 1 + density = TRUE throwpass = 1 - climbable = 1 - anchored = 1 + climbable = TRUE + anchored = TRUE layer = STAIRS_LAYER /obj/structure/ledge/ledge_nub desc = "Part of a rocky ledge." icon_state = "ledge-nub" - density = 0 + density = FALSE solidledge = 0 /obj/structure/ledge/ledge_stairs name = "rock stairs" desc = "A colorful set of rocky stairs" icon_state = "ledge-stairs" - density = 0 + density = FALSE solidledge = 0 /obj/structure/ledge/CanPass(atom/movable/mover, turf/target) diff --git a/code/game/objects/structures/map_blocker_vr.dm b/code/game/objects/structures/map_blocker_vr.dm index 52be6c4035..bd56b08d6e 100644 --- a/code/game/objects/structures/map_blocker_vr.dm +++ b/code/game/objects/structures/map_blocker_vr.dm @@ -4,10 +4,10 @@ desc = "You can't go there!" icon = 'icons/turf/wall_masks.dmi' icon_state = "rdebug" - anchored = 1.0 + anchored = TRUE opacity = 0 - density = 1 - unacidable = 1 + density = TRUE + unacidable = TRUE /obj/effect/blocker/Initialize() // For non-gateway maps. . = ..() diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index d41b8057a7..4fc64a5c52 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -5,8 +5,8 @@ icon = 'icons/obj/watercloset.dmi' icon_state = "mirror" layer = ABOVE_WINDOW_LAYER - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/shattered = 0 var/glass = 1 var/datum/tgui_module/appearance_changer/mirror/M diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 5d5e4fb630..064281c9a9 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -3,8 +3,8 @@ desc = "Fill it with water, but don't forget a mop!" icon = 'icons/obj/janitor.dmi' icon_state = "mopbucket" - density = 1 - climbable = 1 + density = TRUE + climbable = TRUE w_class = ITEMSIZE_NORMAL pressure_resistance = 5 flags = OPENCONTAINER diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index af06a443a6..f9f2287302 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -16,10 +16,10 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "morgue1" dir = EAST - density = 1 + density = TRUE var/obj/structure/m_tray/connected = null var/list/occupants = list() - anchored = 1.0 + anchored = TRUE /obj/structure/morgue/Destroy() if(connected) @@ -147,10 +147,10 @@ desc = "Apply corpse before closing." icon = 'icons/obj/stationobjs.dmi' icon_state = "morguet" - density = 1 + density = TRUE plane = TURF_PLANE var/obj/structure/morgue/connected = null - anchored = 1 + anchored = TRUE throwpass = 1 /obj/structure/m_tray/Destroy() diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index d655581c92..8b54df0c6c 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -3,8 +3,8 @@ desc = "Completely impassable - or are they?" icon = 'icons/obj/stationobjs.dmi' //Change this. icon_state = "plasticflaps" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE layer = MOB_LAYER plane = MOB_PLANE explosion_resistance = 5 diff --git a/code/game/objects/structures/props/swarm.dm b/code/game/objects/structures/props/swarm.dm index 51f59072f4..0498674a6f 100644 --- a/code/game/objects/structures/props/swarm.dm +++ b/code/game/objects/structures/props/swarm.dm @@ -39,7 +39,7 @@ STOP_PROCESSING(SSobj, src) playsound(src,shatter_sound, 75, 1) isbroken = 1 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]-broken" set_light(0) @@ -55,7 +55,7 @@ user.do_attack_animation(src) playsound(src,shatter_sound, 75, 1) isbroken = 1 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]-broken" set_light(0) else @@ -119,7 +119,7 @@ STOP_PROCESSING(SSobj, src) playsound(src,shatter_sound, 75, 1) isbroken = 1 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]-broken" set_light(0) @@ -135,7 +135,7 @@ user.do_attack_animation(src) playsound(src,shatter_sound, 75, 1) isbroken = 1 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]-broken" set_light(0) else diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 876e58c4e3..a4a8e83887 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -3,11 +3,11 @@ name = "railing" desc = "A standard steel railing, painted orange. Play stupid games, win stupid prizes." icon = 'icons/obj/railing.dmi' - density = 1 + density = TRUE throwpass = 1 - climbable = 1 + climbable = TRUE layer = WINDOW_LAYER - anchored = 1 + anchored = TRUE flags = ON_BORDER icon_state = "railing0" var/broken = FALSE @@ -26,7 +26,7 @@ ..() // TODO - "constructed" is not passed to us. We need to find a way to do this safely. if (constructed) // player-constructed railings - anchored = 0 + anchored = FALSE if(climbable) verbs += /obj/structure/proc/climb_on diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 22af69d08b..50071efe4e 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -10,8 +10,8 @@ FLOOR SAFES desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" icon = 'icons/obj/structures.dmi' icon_state = "safe" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/open = 0 //is the safe open? var/tumbler_1_pos //the tumbler position- from 0 to 72 var/tumbler_1_open //the tumbler position to open at- 0 to 72 @@ -170,7 +170,7 @@ FLOOR SAFES /obj/structure/safe/floor name = "floor safe" icon_state = "floorsafe" - density = 0 + density = FALSE level = 1 //underfloor plane = PLATING_PLANE layer = ABOVE_UTILITY diff --git a/code/game/objects/structures/salvageable.dm b/code/game/objects/structures/salvageable.dm index faf6c788aa..0a35848d8d 100644 --- a/code/game/objects/structures/salvageable.dm +++ b/code/game/objects/structures/salvageable.dm @@ -2,8 +2,8 @@ name = "broken macninery" desc = "Broken beyond repair, but looks like you can still salvage something from this if you had a prying implement." icon = 'icons/obj/salvageable.dmi' - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/salvageable_parts = list() /obj/structure/salvageable/proc/dismantle() diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 0ea4d1db25..4afb514fe7 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -1,8 +1,8 @@ /obj/structure/sign icon = 'icons/obj/decals.dmi' - anchored = 1 + anchored = TRUE opacity = 0 - density = 0 + density = FALSE plane = OBJ_PLANE //VOREStation Edit layer = ABOVE_JUNK_LAYER //VOREStation Edit w_class = ITEMSIZE_NORMAL diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index c0385b3132..e7799fcf8f 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -1,7 +1,7 @@ /obj/structure/simple_door name = "door" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE can_atmos_pass = ATMOS_PASS_DENSITY icon = 'icons/obj/doors/material_doors.dmi' @@ -102,7 +102,7 @@ playsound(src, material.dooropen_noise, 100, 1) flick("[material.door_icon_base]opening",src) sleep(10) - density = 0 + density = FALSE set_opacity(0) state = 1 update_icon() @@ -114,7 +114,7 @@ playsound(src, material.dooropen_noise, 100, 1) flick("[material.door_icon_base]closing",src) sleep(10) - density = 1 + density = TRUE set_opacity(1) state = 0 update_icon() diff --git a/code/game/objects/structures/snowman.dm b/code/game/objects/structures/snowman.dm index f3041e0287..7299f1e62e 100644 --- a/code/game/objects/structures/snowman.dm +++ b/code/game/objects/structures/snowman.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/snowman.dmi' icon_state = "snowman" desc = "A happy little snowman smiles back at you!" - anchored = 1 + anchored = TRUE /obj/structure/snowman/attack_hand(mob/user as mob) if(user.a_intent == I_HURT) diff --git a/code/game/objects/structures/stasis_cage.dm b/code/game/objects/structures/stasis_cage.dm index f4791f37f2..b9cae77fa3 100644 --- a/code/game/objects/structures/stasis_cage.dm +++ b/code/game/objects/structures/stasis_cage.dm @@ -3,7 +3,7 @@ desc = "A high-tech animal cage, designed to keep contained fauna docile and safe." icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit icon_state = "critteropen" - density = 1 + density = TRUE var/mob/living/simple_mob/contained diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index ebba811fb9..697e8cffbc 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -80,6 +80,6 @@ /obj/structure/bed/nest/proc/healthcheck() if(health <=0) - density = 0 + density = FALSE qdel(src) return diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index bf9f6ecf2f..87fc1ba5c6 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -13,8 +13,8 @@ icon = 'icons/obj/furniture.dmi' icon_state = "bed" pressure_resistance = 15 - anchored = 1 - can_buckle = 1 + anchored = TRUE + can_buckle = TRUE buckle_dir = SOUTH buckle_lying = 1 var/datum/material/material @@ -201,7 +201,7 @@ desc = "A portable bed-on-wheels made for transporting medical patients." icon = 'icons/obj/rollerbed.dmi' icon_state = "rollerbed" - anchored = 0 + anchored = FALSE surgery_odds = 50 //VOREStation Edit var/bedtype = /obj/structure/bed/roller var/rollertype = /obj/item/roller @@ -301,12 +301,12 @@ if(M.buckled == src) M.pixel_y = 6 M.old_y = 6 - density = 1 + density = TRUE icon_state = "[initial(icon_state)]_up" else M.pixel_y = 0 M.old_y = 0 - density = 0 + density = FALSE icon_state = "[initial(icon_state)]" update_icon() return ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 0bdc32340f..164554652b 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -134,7 +134,7 @@ ..(newloc,"steel","orange") /obj/structure/bed/chair/office - anchored = 0 + anchored = FALSE buckle_movable = 1 /obj/structure/bed/chair/office/update_icon() diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools_vr.dm b/code/game/objects/structures/stool_bed_chair_nest/stools_vr.dm index e513e72f2a..c1f5506139 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools_vr.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools_vr.dm @@ -9,7 +9,7 @@ throwforce = 10 w_class = ITEMSIZE_HUGE base_icon = "bar_stool_base" - anchored = 1 + anchored = TRUE /obj/item/weapon/stool/baystool/padded icon_state = "bar_stool_padded_preview" //set for the map diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 3641d57fda..461cc122bf 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -3,7 +3,7 @@ desc = "You sit in this. Either by will or force." icon = 'icons/obj/wheelchair.dmi' icon_state = "wheelchair" - anchored = 0 + anchored = FALSE buckle_movable = 1 var/folded_type = /obj/item/wheelchair diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 9a2b18e8c6..3a1bf84386 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -5,8 +5,8 @@ desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten phoron tanks." icon = 'icons/obj/objects.dmi' icon_state = "dispenser" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE w_class = ITEMSIZE_HUGE var/oxygentanks = TANK_DISPENSER_CAPACITY var/phorontanks = TANK_DISPENSER_CAPACITY @@ -76,10 +76,10 @@ else if(I.is_wrench()) if(anchored) to_chat(user, "You lean down and unwrench [src].") - anchored = 0 + anchored = FALSE else to_chat(user, "You wrench [src] into place.") - anchored = 1 + anchored = TRUE return else if(user.a_intent != I_HURT) to_chat(user, "[I] does not fit into [src].") diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 7802e258ea..31249e7b43 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -4,7 +4,7 @@ desc = "A thin platform with negatively-magnetized wheels." icon = 'icons/obj/objects.dmi' icon_state = "target_stake" - density = 1 + density = TRUE w_class = ITEMSIZE_HUGE var/obj/item/target/pinned_target // the current pinned target @@ -16,7 +16,7 @@ else // Sanity check: if the pinned target can't be found in immediate view pinned_target = null - density = 1 + density = TRUE /obj/structure/target_stake/attackby(obj/item/W as obj, mob/user as mob) // Putting objects on the stake. Most importantly, targets @@ -24,7 +24,7 @@ return // get rid of that pinned target first! if(istype(W, /obj/item/target)) - density = 0 + density = FALSE W.density = 1 user.remove_from_mob(W) W.loc = loc @@ -36,7 +36,7 @@ /obj/structure/target_stake/attack_hand(mob/user as mob) // taking pinned targets off! if(pinned_target) - density = 1 + density = TRUE pinned_target.density = 0 pinned_target.layer = OBJ_LAYER diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 6053d26ea2..402d560923 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -6,9 +6,9 @@ /obj/structure/transit_tube icon = 'icons/obj/pipes/transit_tube.dmi' icon_state = "E-W" - density = 1 + density = TRUE layer = ABOVE_JUNK_LAYER - anchored = 1.0 + anchored = TRUE var/list/tube_dirs = null var/exit_delay = 2 var/enter_delay = 1 @@ -40,8 +40,8 @@ icon = 'icons/obj/pipes/transit_tube_pod.dmi' icon_state = "pod" animate_movement = FORWARD_STEPS - anchored = 1.0 - density = 1 + anchored = TRUE + density = TRUE var/moving = 0 var/datum/gas_mixture/air_contents = new() @@ -334,7 +334,7 @@ current_tube.pod_stopped(src, dir) break - density = 1 + density = TRUE // If the pod is no longer in a tube, move in a line until stopped or slowed to a halt. // /turf/inertial_drift appears to only work on mobs, and re-implementing some of the @@ -427,7 +427,7 @@ tube_dirs = parse_dirs(icon_state) if(copytext(icon_state, 1, 3) == "D-" || findtextEx(icon_state, "Pass")) - density = 0 + density = FALSE diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index ca0d10d1bc..459f907195 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -3,8 +3,8 @@ desc = "A heap of garbage, but maybe there's something interesting inside?" icon = 'icons/obj/trash_piles.dmi' icon_state = "randompile" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE var/list/searchedby = list()// Characters that have searched this trashpile, with values of searched time. var/mob/living/hider // A simple animal that might be hiding in the pile diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index 7bf83c73c9..3113d6a71e 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -3,7 +3,7 @@ desc = "Holds item of clothing you shouldn't be showing off in the hallways." icon = 'icons/obj/closet.dmi' icon_state = "cabinet_closed" - density = 1 + density = TRUE /obj/structure/undies_wardrobe/attack_hand(var/mob/user) if(!human_who_can_use_underwear(user)) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 4309478e5d..72474fea33 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -5,8 +5,8 @@ desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." icon = 'icons/obj/watercloset.dmi' icon_state = "toilet" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/open = 0 //if the lid is up var/cistern = 0 //if the cistern bit is open var/w_items = 0 //the combined w_class of all the items in the cistern @@ -130,8 +130,8 @@ desc = "The HU-452, an experimental urinal." icon = 'icons/obj/watercloset.dmi' icon_state = "urinal" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE /obj/structure/urinal/attackby(obj/item/I as obj, mob/user as mob) if(istype(I, /obj/item/weapon/grab)) @@ -154,8 +154,8 @@ desc = "The HS-451. Installed in the 2550s by the Hygiene Division." icon = 'icons/obj/watercloset.dmi' icon_state = "shower" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE use_power = USE_POWER_OFF var/on = 0 var/obj/effect/mist/mymist = null @@ -182,7 +182,7 @@ icon_state = "mist" plane = MOB_PLANE layer = ABOVE_MOB_LAYER - anchored = 1 + anchored = TRUE mouse_opacity = 0 /obj/machinery/shower/attack_hand(mob/M as mob) @@ -311,7 +311,7 @@ icon = 'icons/obj/watercloset.dmi' icon_state = "sink" desc = "A sink used for washing one's hands and face." - anchored = 1 + anchored = TRUE var/busy = 0 //Something's being washed at the moment /obj/structure/sink/MouseDrop_T(var/obj/item/thing, var/mob/user) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 57734b929c..287e311559 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -13,8 +13,8 @@ name = "windoor assembly" icon = 'icons/obj/doors/windoor.dmi' icon_state = "l_windoor_assembly01" - anchored = 0 - density = 0 + anchored = FALSE + density = FALSE dir = NORTH w_class = ITEMSIZE_NORMAL @@ -36,7 +36,7 @@ ..() if(constructed) state = "01" - anchored = 0 + anchored = FALSE switch(start_dir) if(NORTH, SOUTH, EAST, WEST) set_dir(start_dir) @@ -47,7 +47,7 @@ update_nearby_tiles(need_rebuild=1) /obj/structure/windoor_assembly/Destroy() - density = 0 + density = FALSE update_nearby_tiles() ..() @@ -200,7 +200,7 @@ if(!src) return - density = 1 //Shouldn't matter but just incase + density = TRUE //Shouldn't matter but just incase to_chat(user,"You finish the windoor!") if(secure) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 6083a38a79..12922d655a 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -2,13 +2,13 @@ name = "window" desc = "A window." icon = 'icons/obj/structures_vr.dmi' // VOREStation Edit - New icons - density = 1 + density = TRUE can_atmos_pass = ATMOS_PASS_PROC w_class = ITEMSIZE_NORMAL layer = WINDOW_LAYER pressure_resistance = 4*ONE_ATMOSPHERE - anchored = 1.0 + anchored = TRUE flags = ON_BORDER var/maxhealth = 14.0 var/maximal_heat = T0C + 100 // Maximal heat before this window begins taking damage from fire @@ -167,7 +167,7 @@ tforce = I.throwforce if(reinf) tforce *= 0.25 if(health - tforce <= 7 && !reinf) - anchored = 0 + anchored = FALSE update_verbs() update_nearby_icons() step(src, get_dir(AM, src)) @@ -325,7 +325,7 @@ user.do_attack_animation(src) hit(W.force) if(health <= 7) - anchored = 0 + anchored = FALSE update_nearby_icons() step(src, get_dir(user, src)) else @@ -392,7 +392,7 @@ //player-constructed windows if (constructed) - anchored = 0 + anchored = FALSE state = 0 update_verbs() @@ -405,7 +405,7 @@ /obj/structure/window/Destroy() - density = 0 + density = FALSE update_nearby_tiles() var/turf/location = loc . = ..() diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index dfeecb7be7..53298bbbdf 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -7,8 +7,8 @@ name = "window grille spawner" icon = 'icons/obj/structures.dmi' icon_state = "wingrille" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE pressure_resistance = 4*ONE_ATMOSPHERE can_atmos_pass = ATMOS_PASS_NO var/win_path = /obj/structure/window/basic diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 579b6f6aea..9217d132bb 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -6,9 +6,9 @@ name = "shuttle window" icon = 'icons/obj/podwindows.dmi' icon_state = "0_0" //The states are a bitflag for connecting window directions, then connecting shuttle wall directions - density = 1 + density = TRUE opacity = 0 - anchored = 1 + anchored = TRUE can_atmos_pass = ATMOS_PASS_NO var/window_flags = 0 // Bitflags to indicate connected windows @@ -48,8 +48,8 @@ /obj/structure/shuttle/engine name = "engine" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE /obj/structure/shuttle/engine/heater name = "heater" diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index c3d1f1aa31..72edce4503 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -9,7 +9,7 @@ if(density) can_open = WALL_OPENING //flick("[material.icon_base]fwall_opening", src) - density = 0 + density = FALSE blocks_air = ZONE_BLOCKED update_icon() update_air() @@ -21,7 +21,7 @@ else can_open = WALL_OPENING //flick("[material.icon_base]fwall_closing", src) - density = 1 + density = TRUE blocks_air = AIR_BLOCKED update_icon() update_air() diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 0383d12b4e..c64537d52f 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -122,7 +122,7 @@ name = "autojoin wall" icon_state = "light" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 var/base_state = "light" //The base iconstate to base sprites on diff --git a/code/game/turfs/simulated/wall_types_vr.dm b/code/game/turfs/simulated/wall_types_vr.dm index 3961e7d22a..b4bb8a5c04 100644 --- a/code/game/turfs/simulated/wall_types_vr.dm +++ b/code/game/turfs/simulated/wall_types_vr.dm @@ -20,7 +20,7 @@ icon = 'icons/turf/stomach_vr.dmi' icon_state = "flesh" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 /turf/simulated/flesh/colour @@ -29,7 +29,7 @@ icon = 'icons/turf/stomach_vr.dmi' icon_state = "colorable-wall" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 /turf/simulated/flesh/attackby() @@ -67,7 +67,7 @@ var/list/flesh_overlay_cache = list() icon = 'icons/goonstation/turf/meatland.dmi' icon_state = "bloodwall_2" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 /turf/simulated/goreeyes @@ -76,7 +76,7 @@ var/list/flesh_overlay_cache = list() icon = 'icons/goonstation/turf/meatland.dmi' icon_state = "bloodwall_4" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 /turf/simulated/shuttle/wall/flock diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 7f5421a1f5..56c9fbec8d 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -4,7 +4,7 @@ icon = 'icons/turf/wall_masks.dmi' icon_state = "generic" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 33bd3eaa2a..aa8d775b9b 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -9,7 +9,7 @@ thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT can_build_into_floor = TRUE var/keep_sprite = FALSE - var/edge = 0 //If we're an edge + var/edge = FALSE //If we're an edge var/forced_dirs = 0 //Force this one to pretend it's an overedge turf /turf/space/Initialize() diff --git a/code/game/turfs/unsimulated/planetary.dm b/code/game/turfs/unsimulated/planetary.dm index 9fe487410f..8e08b8d26d 100644 --- a/code/game/turfs/unsimulated/planetary.dm +++ b/code/game/turfs/unsimulated/planetary.dm @@ -6,7 +6,7 @@ icon = 'icons/turf/walls.dmi' icon_state = "riveted" opacity = 1 - density = 1 + density = TRUE alpha = 0 blocks_air = 0 diff --git a/code/game/turfs/unsimulated/shuttle.dm b/code/game/turfs/unsimulated/shuttle.dm index cb70c6c36d..ced6d2804b 100644 --- a/code/game/turfs/unsimulated/shuttle.dm +++ b/code/game/turfs/unsimulated/shuttle.dm @@ -8,7 +8,7 @@ name = "wall" icon_state = "light" opacity = 1 - density = 1 + density = TRUE blocks_air = 1 /turf/unsimulated/shuttle/wall/dark diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index 6f13cdb54b..878a12404a 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -3,7 +3,7 @@ icon = 'icons/turf/walls.dmi' icon_state = "riveted" opacity = 1 - density = 1 + density = TRUE blocks_air = TRUE /turf/unsimulated/wall/fakeglass diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm index 1250c7d961..b7361ea7f7 100644 --- a/code/game/vehicles/vehicle.dm +++ b/code/game/vehicles/vehicle.dm @@ -3,9 +3,9 @@ /obj/vehicle name = "Vehicle" icon = 'icons/vehicles/vehicles.dmi' - density = 1 - anchored = 1 - unacidable = 1 //To avoid the pilot-deleting shit that came with mechas + density = TRUE + anchored = TRUE + unacidable = TRUE //To avoid the pilot-deleting shit that came with mechas layer = MOB_LAYER //var/can_move = 1 var/mob/living/carbon/occupant = null diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 5e9c63949b..290b04bdde 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -49,8 +49,8 @@ H.cl = M.client /obj/effect/bmode//Cleaning up the tree a bit - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE layer = LAYER_HUD_BASE plane = PLANE_PLAYER_HUD dir = NORTH @@ -179,8 +179,8 @@ return 1 /obj/effect/bmode/buildholder - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/client/cl = null var/obj/effect/bmode/builddir/builddir = null var/obj/effect/bmode/buildhelp/buildhelp = null diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 67bf2c851c..b619ee9f22 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -148,7 +148,7 @@ icon_state = "ibeam" var/obj/item/device/assembly/infra/master = null var/visible = 0 - anchored = 1 + anchored = TRUE /obj/effect/beam/i_beam/Initialize() . = ..() diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index 331e96efa4..5781085c5e 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -4,8 +4,8 @@ name = "bluespace artillery control" icon_state = "control_boxp1" icon = 'icons/obj/machines/particle_accelerator2.dmi' - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE /obj/machinery/artillerycontrol/process() if(src.reload<180) @@ -14,11 +14,11 @@ /obj/structure/artilleryplaceholder name = "artillery" icon = 'icons/obj/machines/artillery.dmi' - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE /obj/structure/artilleryplaceholder/decorative - density = 0 + density = FALSE /obj/machinery/artillerycontrol/attack_hand(mob/user as mob) user.set_machine(src) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index bf734a429f..1fa45f6a10 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -3,15 +3,15 @@ desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities." //VOREStation Edit icon = 'icons/obj/machines/gateway.dmi' icon_state = "off" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/active = 0 /obj/machinery/gateway/Initialize() update_icon() if(dir == SOUTH) - density = 0 + density = FALSE . = ..() /obj/machinery/gateway/update_icon() @@ -25,7 +25,7 @@ //this is da important part wot makes things go GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation) /obj/machinery/gateway/centerstation - density = 1 + density = TRUE icon_state = "offcenter" use_power = USE_POWER_IDLE @@ -50,7 +50,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation) awaygate = locate(/obj/machinery/gateway/centeraway) . = ..() - density = 1 //VOREStation Add + density = TRUE //VOREStation Add /obj/machinery/gateway/centerstation/Destroy() if(awaygate?.stationgate == src) @@ -66,7 +66,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation) icon_state = "offcenter" /* VOREStation Removal - Doesn't do anything /obj/machinery/gateway/centerstation/New() - density = 1 + density = TRUE */ //VOREStation Removal End /obj/machinery/gateway/centerstation/process() @@ -238,7 +238,7 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation) /////////////////////////////////////Away//////////////////////// GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway) /obj/machinery/gateway/centeraway - density = 1 + density = TRUE icon_state = "offcenter" use_power = USE_POWER_OFF var/calibrated = 1 @@ -247,7 +247,7 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway) var/obj/machinery/gateway/centerstation/stationgate = null /obj/machinery/gateway/centeraway/New() - density = 1 + density = TRUE /obj/machinery/gateway/centeraway/Initialize() if(GLOB.gateway_away) @@ -262,7 +262,7 @@ GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway) else stationgate = locate(/obj/machinery/gateway/centerstation) . = ..() - density = 1 //VOREStation Add + density = TRUE //VOREStation Add /obj/machinery/gateway/centeraway/Destroy() if(stationgate?.awaygate == src) diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index 71a8d44dca..17509ce12e 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -352,7 +352,7 @@ /**********************************/ /obj/structure/symbol - anchored = 1 + anchored = TRUE layer = 3.5 name = "strange symbol" icon = 'icons/obj/decals_vr.dmi' diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm index 587214a0cb..5218a78c7f 100644 --- a/code/modules/blob/blob.dm +++ b/code/modules/blob/blob.dm @@ -6,9 +6,9 @@ light_range = 2 light_color = "#b5ff5b" desc = "Some blob creature thingy" - density = 1 + density = TRUE opacity = 0 - anchored = 1 + anchored = TRUE mouse_opacity = 2 var/maxHealth = 30 @@ -193,7 +193,7 @@ update_nearby_tiles() /obj/effect/blob/shield/Destroy() - density = 0 + density = FALSE update_nearby_tiles() ..() diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm index 320ea7a90e..0d577443be 100644 --- a/code/modules/clothing/masks/monitor.dm +++ b/code/modules/clothing/masks/monitor.dm @@ -23,14 +23,14 @@ if(istype(H) && H.wear_mask == src) var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD] var/datum/robolimb/robohead = all_robolimbs[E.model] - canremove = 0 + canremove = FALSE if(robohead.monitor_styles) monitor_states = params2list(robohead.monitor_styles) icon_state = monitor_states[monitor_state_index] to_chat(H, "\The [src] connects to your display output.") /obj/item/clothing/mask/monitor/dropped() - canremove = 1 + canremove = TRUE return ..() /obj/item/clothing/mask/monitor/mob_can_equip(var/mob/living/carbon/human/user, var/slot, disable_warning = FALSE) diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index bdf2be889d..b775dcf98c 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -97,7 +97,7 @@ if(src.magpulse) item_flags &= ~NOSLIP magpulse = 0 - canremove = 1 + canremove = TRUE to_chat(user, "You relax your deathgrip on the flooring.") else //make sure these can only be used when equipped. @@ -110,7 +110,7 @@ item_flags |= NOSLIP magpulse = 1 - canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly. + canremove = FALSE //kinda hard to take off magclaws when you are gripping them tightly. to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") user.update_action_buttons() @@ -121,7 +121,7 @@ user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.") item_flags &= ~NOSLIP magpulse = 0 - canremove = 1 + canremove = TRUE /obj/item/clothing/shoes/magboots/vox/examine(mob/user) . = ..() diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 18427873ab..2af03fb511 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -23,7 +23,7 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.2 permeability_coefficient = 0.1 - unacidable = 1 + unacidable = TRUE preserve_item = 1 var/default_mob_icon = 'icons/mob/rig_back.dmi' @@ -246,7 +246,7 @@ /obj/item/weapon/rig/proc/reset() offline = 2 - canremove = 1 + canremove = TRUE for(var/obj/item/piece in list(helmet,boots,gloves,chest)) if(!piece) continue piece.icon_state = "[suit_state]" @@ -256,7 +256,7 @@ /obj/item/weapon/rig/proc/cut_suit() offline = 2 - canremove = 1 + canremove = TRUE toggle_piece("helmet", loc, ONLY_RETRACT, TRUE) toggle_piece("gauntlets", loc, ONLY_RETRACT, TRUE) toggle_piece("boots", loc, ONLY_RETRACT, TRUE) @@ -286,7 +286,7 @@ M.client?.screen += booting_L M.client?.screen += booting_R - canremove = 0 // No removing the suit while unsealing. + canremove = FALSE // No removing the suit while unsealing. sealing = 1 if(!seal_target && !suit_is_deployed()) diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm index f86ecf8642..7dab89d1d7 100644 --- a/code/modules/clothing/spacesuits/void/wizard.dm +++ b/code/modules/clothing/spacesuits/void/wizard.dm @@ -4,7 +4,7 @@ desc = "A bizarre gem-encrusted helmet that radiates magical energies." icon_state = "rig0-wiz" item_state_slots = list(slot_r_hand_str = "wiz_helm", slot_l_hand_str = "wiz_helm") - unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! + unacidable = TRUE //No longer shall our kind be foiled by lone chemists with spray bottles! armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.7 sprite_sheets_refit = null @@ -17,7 +17,7 @@ desc = "A bizarre gem-encrusted suit that radiates magical energies." item_state_slots = list(slot_r_hand_str = "wiz_voidsuit", slot_l_hand_str = "wiz_voidsuit") w_class = ITEMSIZE_NORMAL - unacidable = 1 + unacidable = TRUE armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.7 sprite_sheets_refit = null diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index 9af65789fe..1017e74df8 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -4,8 +4,8 @@ desc = "A high tech machine that is designed to read DNA samples properly." icon = 'icons/obj/forensics.dmi' icon_state = "dnaopen" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE circuit = /obj/item/weapon/circuitboard/dna_analyzer var/obj/item/weapon/forensics/swab/bloodsamp = null diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm index 5b556f4c00..575465d0e0 100644 --- a/code/modules/detectivework/microscope/microscope.dm +++ b/code/modules/detectivework/microscope/microscope.dm @@ -4,8 +4,8 @@ desc = "A highly advanced microscope capable of zooming up to 3000x." icon = 'icons/obj/forensics.dmi' icon_state = "microscope" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/obj/item/weapon/sample = null var/report_num = 0 diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 4ec669a565..301c99b704 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -24,7 +24,7 @@ volume = 10 can_be_placed_into = null flags = OPENCONTAINER | NOBLUDGEON - unacidable = 0 + unacidable = FALSE drop_sound = 'sound/items/drop/cloth.ogg' pickup_sound = 'sound/items/pickup/cloth.ogg' diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index f09c6ab7bc..8abd3583c0 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -19,7 +19,7 @@ log transactions desc = "For all your monetary needs!" icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit icon_state = "atm" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 circuit = /obj/item/weapon/circuitboard/atm diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm index f220f29e14..237f1206cb 100644 --- a/code/modules/economy/Accounts_DB.dm +++ b/code/modules/economy/Accounts_DB.dm @@ -4,9 +4,9 @@ desc = "Access transaction logs, account data and all kinds of other financial records." icon = 'icons/obj/computer.dmi' icon_state = "account_computer" - density = 1 + density = TRUE req_one_access = list(access_hop, access_captain, access_cent_captain) - anchored = 1 + anchored = TRUE var/receipt_num var/machine_id = "" var/obj/item/weapon/card/id/held_card diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index c67ddac088..ec2ad51dca 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -6,8 +6,8 @@ icon = 'icons/obj/items.dmi' icon_state = "spacecash1" opacity = 0 - density = 0 - anchored = 0.0 + density = FALSE + anchored = FALSE force = 1.0 throwforce = 1.0 throw_speed = 1 diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index ddf19d895c..9286401aae 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -5,7 +5,7 @@ icon_state = "register_idle" flags = NOBLUDGEON req_access = list(access_heads) - anchored = 1 + anchored = TRUE var/locked = 1 var/cash_locked = 1 diff --git a/code/modules/economy/mint.dm b/code/modules/economy/mint.dm index 8417663150..db50578fe7 100644 --- a/code/modules/economy/mint.dm +++ b/code/modules/economy/mint.dm @@ -3,8 +3,8 @@ name = "Coin press" icon = 'icons/obj/stationobjs.dmi' icon_state = "coinpress0" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null var/amt_silver = 0 //amount of silver diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index 4086dcd921..bc8130d0e0 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -11,8 +11,8 @@ desc = "A generic vending machine." icon = 'icons/obj/vending.dmi' icon_state = "generic" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE clicksound = "button" // Power diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index dfd693afd2..af7e905005 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -406,7 +406,7 @@ product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" icon_state = "wallmed" layer = ABOVE_WINDOW_LAYER - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, /obj/item/weapon/reagent_containers/hypospray/autoinjector = 4, @@ -424,7 +424,7 @@ description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments." icon_state = "wallmed" layer = ABOVE_WINDOW_LAYER - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5, /obj/item/weapon/reagent_containers/syringe/antitoxin = 3, /obj/item/stack/medical/bruise_pack = 3, diff --git a/code/modules/events/meteor_strike_vr.dm b/code/modules/events/meteor_strike_vr.dm index 83b1f8ac2d..3ed40c50f3 100644 --- a/code/modules/events/meteor_strike_vr.dm +++ b/code/modules/events/meteor_strike_vr.dm @@ -21,7 +21,7 @@ desc = "The sky is falling!" icon = 'icons/obj/meteor.dmi' icon_state = "large" - anchored = 1 + anchored = TRUE /obj/effect/meteor_falling/New() ..() @@ -73,8 +73,8 @@ desc = "A big hunk of star-stuff." icon = 'icons/obj/meteor.dmi' icon_state = "large" - density = 1 - climbable = 1 + density = TRUE + climbable = TRUE /obj/structure/meteorite/New() ..() diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 5fac3debd7..963b869439 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -222,8 +222,8 @@ Gunshots/explosions/opening doors/less rare audio (done) icon_state = null name = "" desc = "" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE opacity = 0 var/mob/living/carbon/human/my_target = null var/weapon_name = null diff --git a/code/modules/food/drinkingglass/metaglass.dm b/code/modules/food/drinkingglass/metaglass.dm index b8167f10bb..d182c0837f 100644 --- a/code/modules/food/drinkingglass/metaglass.dm +++ b/code/modules/food/drinkingglass/metaglass.dm @@ -4,7 +4,7 @@ icon_state = "glass_empty" amount_per_transfer_from_this = 5 volume = 30 - unacidable = 1 //glass + unacidable = TRUE //glass center_of_mass = list("x"=16, "y"=10) matter = list(MAT_GLASS = 500) icon = 'icons/obj/drinks.dmi' diff --git a/code/modules/food/food/drinks/bottle.dm b/code/modules/food/food/drinks/bottle.dm index 90979df1e6..831bca128e 100644 --- a/code/modules/food/food/drinks/bottle.dm +++ b/code/modules/food/food/drinks/bottle.dm @@ -18,7 +18,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/Initialize() . = ..() if(isGlass) - unacidable = 1 + unacidable = TRUE drop_sound = 'sound/items/drop/bottle.ogg' pickup_sound = 'sound/items/pickup/bottle.ogg' @@ -184,8 +184,8 @@ item_state = "beer" flags = NOCONDUCT attack_verb = list("stabbed", "slashed", "attacked") - sharp = 1 - edge = 0 + sharp = TRUE + edge = FALSE var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken") /obj/item/weapon/broken_bottle/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) diff --git a/code/modules/food/food/drinks/drinkingglass.dm b/code/modules/food/food/drinks/drinkingglass.dm index 92609ebbd4..da640b272a 100644 --- a/code/modules/food/food/drinks/drinkingglass.dm +++ b/code/modules/food/food/drinks/drinkingglass.dm @@ -6,7 +6,7 @@ icon_state = "glass_empty" amount_per_transfer_from_this = 5 volume = 30 - unacidable = 1 //glass + unacidable = TRUE //glass center_of_mass = list("x"=16, "y"=10) matter = list(MAT_GLASS = 500) diff --git a/code/modules/food/food/drinks/jar.dm b/code/modules/food/food/drinks/jar.dm index 2167eb48a4..515a5bfba8 100644 --- a/code/modules/food/food/drinks/jar.dm +++ b/code/modules/food/food/drinks/jar.dm @@ -5,7 +5,7 @@ icon_state = "jar" item_state = "beaker" center_of_mass = list("x"=15, "y"=8) - unacidable = 1 + unacidable = TRUE /obj/item/weapon/reagent_containers/food/drinks/jar/on_reagent_change() if (reagents.reagent_list.len > 0) diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm index 9a838efeb8..db3025f961 100644 --- a/code/modules/food/kitchen/cooking_machines/_appliance.dm +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -10,8 +10,8 @@ desc = "You shouldn't be seeing this!" icon = 'icons/obj/cooking_machines.dmi' var/appliancetype = 0 - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 5 // Power used when turned on, but not processing anything diff --git a/code/modules/food/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm index cb52a0ca7b..737072ba55 100644 --- a/code/modules/food/kitchen/gibber.dm +++ b/code/modules/food/kitchen/gibber.dm @@ -4,8 +4,8 @@ desc = "The name isn't descriptive enough?" icon = 'icons/obj/kitchen.dmi' icon_state = "grinder" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE req_access = list(access_kitchen,access_morgue) var/operating = 0 //Is it on? diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm index 9887bc7bd7..7dd64d3574 100644 --- a/code/modules/food/kitchen/icecream.dm +++ b/code/modules/food/kitchen/icecream.dm @@ -12,8 +12,8 @@ desc = "Ding-aling ding dong. Get your NanoTrasen-approved ice cream!" icon = 'icons/obj/kitchen.dmi' icon_state = "icecream_vat" - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE use_power = USE_POWER_OFF flags = OPENCONTAINER | NOREACT diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index 9162286858..bb9ef2a255 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/kitchen.dmi' icon_state = "mw" layer = 2.9 - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 5 active_power_usage = 2000 diff --git a/code/modules/food/kitchen/smartfridge/smartfridge.dm b/code/modules/food/kitchen/smartfridge/smartfridge.dm index 6e9e47e411..5e0f2e4284 100644 --- a/code/modules/food/kitchen/smartfridge/smartfridge.dm +++ b/code/modules/food/kitchen/smartfridge/smartfridge.dm @@ -7,8 +7,8 @@ icon_state = "smartfridge" var/icon_base = "smartfridge" //Iconstate to base all the broken/deny/etc on var/icon_contents = "misc" //Overlay to put on glass to show contents - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 5 active_power_usage = 100 diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 70fa60be35..3a783060f1 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -128,7 +128,7 @@ desc = "Apply butt." icon = 'icons/obj/furniture.dmi' icon_state = "stool_padded_preview" - anchored = 1.0 + anchored = TRUE pressure_resistance = 15 /obj/item/clothing/gloves/boxing/hologlove @@ -212,7 +212,7 @@ if(W.damtype == BRUTE || W.damtype == BURN) hit(W.force) if(health <= 7) - anchored = 0 + anchored = FALSE update_nearby_icons() step(src, get_dir(user, src)) else @@ -367,8 +367,8 @@ desc = "Boom, Shakalaka!" icon = 'icons/obj/basketball.dmi' icon_state = "hoop" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE throwpass = 1 /obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -411,7 +411,7 @@ var/area/currentarea = null var/eventstarted = 0 - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm index 2430267981..8c88102f06 100644 --- a/code/modules/holomap/station_holomap.dm +++ b/code/modules/holomap/station_holomap.dm @@ -7,8 +7,8 @@ icon = 'icons/obj/machines/stationmap.dmi' icon_state = "station_map" layer = ABOVE_WINDOW_LAYER - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 500 diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index f514ff8b6a..37f7c5cc79 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -2,8 +2,8 @@ name = "beehive" icon = 'icons/obj/beekeeping.dmi' icon_state = "beehive" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/closed = 0 var/bee_count = 0 // Percent diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 690d970522..32013d9734 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -35,8 +35,8 @@ /obj/machinery/botany icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "hydrotray3" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE var/obj/item/seeds/seed // Currently loaded seed packet. diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 8034e3d9ff..3ff2e48174 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -22,8 +22,8 @@ desc = "It stores, sorts, and dispenses seeds." icon = 'icons/obj/vending.dmi' icon_state = "seeds" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 100 diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 73d93abe55..e55bb448bd 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -29,9 +29,9 @@ message_admins("Event: Spacevines failed to find a viable turf.") /obj/effect/dead_plant - anchored = 1 + anchored = TRUE opacity = 0 - density = 0 + density = FALSE color = DEAD_PLANT_COLOUR /obj/effect/dead_plant/attack_hand() @@ -45,10 +45,10 @@ /obj/effect/plant name = "plant" - anchored = 1 - can_buckle = 1 + anchored = TRUE + can_buckle = TRUE opacity = 0 - density = 0 + density = FALSE icon = 'icons/obj/hydroponics_growing.dmi' icon_state = "bush4-1" pass_flags = PASSTABLE @@ -197,10 +197,10 @@ plane = ABOVE_PLANE set_opacity(1) if(!isnull(seed.chems["woodpulp"])) - density = 1 + density = TRUE else reset_plane_and_layer() - density = 0 + density = FALSE /obj/effect/plant/proc/calc_dir() set background = 1 diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index c049457e75..5eddbb59b8 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -5,8 +5,8 @@ desc = "A tray usually full of fluid for growing plants." icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "hydrotray3" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE flags = OPENCONTAINER volume = 100 diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index 76a3417645..ff32f9712b 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -1,7 +1,7 @@ /obj/machinery/portable_atmospherics/hydroponics/soil name = "soil" icon_state = "soil" - density = 0 + density = FALSE use_power = USE_POWER_OFF mechanical = 0 tray_light = 0 diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index ff8bb0f16b..b7fc6ae0b6 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -1,7 +1,7 @@ /obj/item/integrated_circuit/reagent category_text = "Reagent" var/volume = 0 - unacidable = 1 + unacidable = TRUE origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/New() diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index af20cc0959..85a06cd571 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -16,8 +16,8 @@ desc = "A set of wooden shelves, perfect for placing books on." icon = 'icons/obj/library.dmi' icon_state = "book-0" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE opacity = 1 /obj/structure/bookcase/Initialize() @@ -104,7 +104,7 @@ Book Cart name = "book cart" icon = 'icons/obj/library.dmi' icon_state = "bookcart-0" - anchored = 0 + anchored = FALSE opacity = 0 /obj/structure/bookcase/bookcart/attackby(obj/item/O as obj, mob/user as mob) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index f1f518d375..50980217a3 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -24,8 +24,8 @@ name = "visitor computer" icon = 'icons/obj/library.dmi' icon_state = "computer" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/screenstate = 0 var/title var/category = "Any" @@ -127,8 +127,8 @@ desc = "Print books from the archives! (You aren't quite sure how they're printed by it, though.)" icon = 'icons/obj/library.dmi' icon_state = "computer" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/arcanecheckout = 0 var/screenstate = 0 // 0 - Main Menu, 1 - Inventory, 2 - Checked Out, 3 - Check Out a Book var/sortby = "author" @@ -488,8 +488,8 @@ desc = "A scanner for scanning in books and papers." icon = 'icons/obj/library.dmi' icon_state = "bigscanner" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/obj/item/weapon/book/cache // Last scanned book /obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob) @@ -540,8 +540,8 @@ desc = "Bundles up a stack of inserted paper into a convenient book format." icon = 'icons/obj/library.dmi' icon_state = "binder" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE /obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/paper_bundle)) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index e21275504c..f1b8816c8a 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -1,8 +1,8 @@ /obj/machinery/mining icon = 'icons/obj/mining_drill.dmi' - anchored = 0 + anchored = FALSE use_power = USE_POWER_OFF //The drill takes power directly from a cell. - density = 1 + density = TRUE layer = MOB_LAYER+0.1 //So it draws over mobs in the tile north of it. /obj/machinery/mining/drill @@ -266,10 +266,10 @@ if((!supports || !supports.len) && initial(anchored) == 0) icon_state = "mining_drill" - anchored = 0 + anchored = FALSE active = 0 else - anchored = 1 + anchored = TRUE if(supports && supports.len >= braces_needed) supported = 1 diff --git a/code/modules/mining/machinery/machine_input_output_plates.dm b/code/modules/mining/machinery/machine_input_output_plates.dm index 35149a49b3..179a8f112b 100644 --- a/code/modules/mining/machinery/machine_input_output_plates.dm +++ b/code/modules/mining/machinery/machine_input_output_plates.dm @@ -4,8 +4,8 @@ icon = 'icons/mob/screen1.dmi' icon_state = "x2" name = "Input area" - density = 0 - anchored = 1.0 + density = FALSE + anchored = TRUE /obj/machinery/mineral/input/New() icon_state = "blank" @@ -14,8 +14,8 @@ icon = 'icons/mob/screen1.dmi' icon_state = "x" name = "Output area" - density = 0 - anchored = 1.0 + density = FALSE + anchored = TRUE /obj/machinery/mineral/output/New() icon_state = "blank" \ No newline at end of file diff --git a/code/modules/mining/machinery/machine_stacking.dm b/code/modules/mining/machinery/machine_stacking.dm index 9469b2d64d..030c52f764 100644 --- a/code/modules/mining/machinery/machine_stacking.dm +++ b/code/modules/mining/machinery/machine_stacking.dm @@ -5,8 +5,8 @@ icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit icon_state = "console" layer = ABOVE_WINDOW_LAYER - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/obj/machinery/mineral/stacking_machine/machine = null //var/machinedir = SOUTHEAST //This is really dumb, so lets burn it with fire. @@ -77,8 +77,8 @@ name = "stacking machine" icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit icon_state = "stacker" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE var/obj/machinery/mineral/stacking_unit_console/console var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null diff --git a/code/modules/mining/machinery/machine_unloading.dm b/code/modules/mining/machinery/machine_unloading.dm index 73caa57bc1..ed609e4dfa 100644 --- a/code/modules/mining/machinery/machine_unloading.dm +++ b/code/modules/mining/machinery/machine_unloading.dm @@ -5,8 +5,8 @@ name = "unloading machine" icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit icon_state = "unloader" - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index dc12d0c61a..c03e588d78 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -26,7 +26,7 @@ attack_verb = list("hit", "pierced", "sliced", "attacked") var/drill_sound = "pickaxe" var/drill_verb = "drilling" - sharp = 1 + sharp = TRUE var/excavation_amount = 200 var/destroy_artefacts = FALSE // some mining tools will destroy artefacts completely while avoiding side-effects. @@ -78,8 +78,8 @@ desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff." drill_verb = "cutting" drill_sound = 'sound/items/Welder.ogg' - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /obj/item/weapon/pickaxe/diamond name = "diamond pickaxe" @@ -124,8 +124,8 @@ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) matter = list(MAT_STEEL = 50) attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") - sharp = 0 - edge = 1 + sharp = FALSE + edge = TRUE var/digspeed = 40 /obj/item/weapon/shovel/spade @@ -144,7 +144,7 @@ desc = "A mining car. This one doesn't work on rails, but has to be dragged." name = "Mining car (not for rails)" icon = 'icons/obj/closets/miningcar.dmi' - density = 1 + density = TRUE // Flags. @@ -193,7 +193,7 @@ if(upright) upright = 0 icon_state = base_state - anchored = 0 + anchored = FALSE src.visible_message("[user] knocks down [src].") else ..() diff --git a/code/modules/mining/mine_outcrops.dm b/code/modules/mining/mine_outcrops.dm index 989b172e1e..ae70e710e3 100644 --- a/code/modules/mining/mine_outcrops.dm +++ b/code/modules/mining/mine_outcrops.dm @@ -2,10 +2,10 @@ name = "outcrop" desc = "A boring rocky outcrop." icon = 'icons/obj/outcrop.dmi' - density = 1 + density = TRUE throwpass = 1 - climbable = 1 - anchored = 1 + climbable = TRUE + anchored = TRUE icon_state = "outcrop" var/mindrop = 5 var/upperdrop = 10 diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 3af97e5e75..76738f2654 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -5,6 +5,7 @@ var/list/mining_overlay_cache = list() name = "impassable rock" icon = 'icons/turf/walls.dmi' icon_state = "rock-dark" +<<<<<<< HEAD density = 1 opacity = 1 // YW edit. Stops all my unsimulated tiles from being seethrough. @@ -15,6 +16,11 @@ var/list/mining_overlay_cache = list() icon = 'icons/turf/snow_new.dmi' icon_state = "Icerock" //YW add end +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) + density = 1 +======= + density = TRUE +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) /turf/simulated/mineral //wall piece name = "rock" @@ -27,7 +33,7 @@ var/list/mining_overlay_cache = list() oxygen = 0 nitrogen = 0 opacity = 1 - density = 1 + density = TRUE blocks_air = 1 temperature = T0C @@ -113,7 +119,7 @@ var/list/mining_overlay_cache = list() name = "sand" icon = 'icons/turf/flooring/asteroid.dmi' icon_state = "asteroid" - density = 0 + density = FALSE opacity = 0 blocks_air = 0 can_build_into_floor = TRUE @@ -145,7 +151,7 @@ var/list/mining_overlay_cache = list() /turf/simulated/mineral/proc/make_floor() if(!density && !opacity) return - density = 0 + density = FALSE opacity = 0 blocks_air = 0 can_build_into_floor = TRUE @@ -154,7 +160,7 @@ var/list/mining_overlay_cache = list() /turf/simulated/mineral/proc/make_wall() if(density && opacity) return - density = 1 + density = TRUE opacity = 1 blocks_air = 1 can_build_into_floor = FALSE diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm index f8bc4a03d6..43bd5c8588 100644 --- a/code/modules/mining/mineral_effect.dm +++ b/code/modules/mining/mineral_effect.dm @@ -3,8 +3,8 @@ icon = 'icons/obj/mining.dmi' desc = "Shiny." mouse_opacity = 0 - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/ore_key var/image/scanner_image var/ore_reagent // Reagent from pumping water near this ore. diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index 965ec4a9df..7ab96cda10 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -5,7 +5,7 @@ icon_state = "orebox0" name = "ore box" desc = "A heavy box used for storing ore." - density = 1 + density = TRUE var/last_update = 0 var/list/stored_ore = list() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a3ff5cf5c7..d8cb355f93 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /mob/observer name = "observer" desc = "This shouldn't appear" @@ -994,3 +995,1998 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Respawn" set category = "Ghost" src.abandon_mob() +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) +/mob/observer + name = "observer" + desc = "This shouldn't appear" + density = 0 + vis_flags = NONE + +/mob/observer/dead + name = "ghost" + desc = "It's a g-g-g-g-ghooooost!" //jinkies! + icon = 'icons/mob/ghost.dmi' + icon_state = "ghost" + stat = DEAD + canmove = 0 + blinded = 0 + anchored = 1 // don't get pushed around + + var/can_reenter_corpse + var/datum/hud/living/carbon/hud = null // hud + var/bootime = 0 + var/started_as_observer //This variable is set to 1 when you enter the game as an observer. + //If you died in the game and are a ghsot - this will remain as null. + //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. + var/has_enabled_antagHUD = 0 + var/medHUD = 0 + var/secHUD = 0 + var/antagHUD = 0 + universal_speak = 1 + var/atom/movable/following = null + var/admin_ghosted = 0 + var/anonsay = 0 + var/ghostvision = 1 //is the ghost able to see things humans can't? + incorporeal_move = 1 + + var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil. + var/ghost_sprite = null + var/global/list/possible_ghost_sprites = list( + "Clear" = "blank", + "Green Blob" = "otherthing", + "Bland" = "ghost", + "Robed-B" = "ghost1", + "Robed-BAlt" = "ghost2", + "King" = "ghostking", + "Shade" = "shade", + "Hecate" = "ghost-narsie", + "Glowing Statue" = "armour", + "Artificer" = "artificer", + "Behemoth" = "behemoth", + "Harvester" = "harvester", + "Wraith" = "wraith", + "Viscerator" = "viscerator", + "Corgi" = "corgi", + "Tamaskan" = "tamaskan", + "Black Cat" = "blackcat", + "Lizard" = "lizard", + "Goat" = "goat", + "Space Bear" = "bear", + "Bats" = "bat", + "Chicken" = "chicken_white", + "Parrot"= "parrot_fly", + "Goose" = "goose", + "Penguin" = "penguin", + "Brown Crab" = "crab", + "Gray Crab" = "evilcrab", + "Trout" = "trout-swim", + "Salmon" = "salmon-swim", + "Pike" = "pike-swim", + "Koi" = "koi-swim", + "Carp" = "carp", + "Red Robes" = "robe_red", + "Faithless" = "faithless", + "Shadowform" = "forgotten", + "Dark Ethereal" = "bloodguardian", + "Holy Ethereal" = "lightguardian", + "Red Elemental" = "magicRed", + "Blue Elemental" = "magicBlue", + "Pink Elemental" = "magicPink", + "Orange Elemental" = "magicOrange", + "Green Elemental" = "magicGreen", + "Daemon" = "daemon", + "Guard Spider" = "guard", + "Hunter Spider" = "hunter", + "Nurse Spider" = "nurse", + "Rogue Drone" = "drone", + "ED-209" = "ed209", + "Beepsky" = "secbot" + ) + var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners. + var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns + +/mob/observer/dead/New(mob/body) + + appearance = body + invisibility = INVISIBILITY_OBSERVER + layer = BELOW_MOB_LAYER + plane = PLANE_GHOSTS + alpha = 127 + + sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF + see_invisible = SEE_INVISIBLE_OBSERVER + see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but... + + var/turf/T + if(ismob(body)) + T = get_turf(body) //Where is the body located? + attack_log = body.attack_log //preserve our attack logs by copying them to our ghost + gender = body.gender + if(body.mind && body.mind.name) + name = body.mind.name + else + if(body.real_name) + name = body.real_name + else + if(gender == MALE) + name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + else + name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) + + mind = body.mind //we don't transfer the mind but we keep a reference to it. + + // Fix for naked ghosts. + // Unclear why this isn't being grabbed by appearance. + if(ishuman(body)) + var/mob/living/carbon/human/H = body + add_overlay(H.overlays_standing) + + if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position + forceMove(T) + + if(!name) //To prevent nameless ghosts + name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + real_name = name + animate(src, pixel_y = 2, time = 10, loop = -1) + observer_mob_list += src + ..() + +/mob/observer/dead/Topic(href, href_list) + if (href_list["track"]) + var/mob/target = locate(href_list["track"]) in mob_list + if(target) + ManualFollow(target) + if(href_list["reenter"]) + reenter_corpse() + return + +/mob/observer/dead/attackby(obj/item/W, mob/user) + if(istype(W,/obj/item/weapon/book/tome)) + var/mob/observer/dead/M = src + M.manifest(user) + +/mob/observer/dead/CanPass(atom/movable/mover, turf/target) + return TRUE + +/mob/observer/dead/set_stat(var/new_stat) + if(new_stat != DEAD) + CRASH("It is best if observers stay dead, thank you.") + +/mob/observer/dead/examine_icon() + var/icon/I = get_cached_examine_icon(src) + if(!I) + I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE) + set_cached_examine_icon(src, I, 200 SECONDS) + return I + +/mob/observer/dead/examine(mob/user) + . = ..() + + if(is_admin(user)) + . += "\t>[ADMIN_FULLMONTY(src)]" + +/* +Transfer_mind is there to check if mob is being deleted/not going to have a body. +Works together with spawning an observer, noted above. +*/ + +/mob/observer/dead/Life() + ..() + if(!loc) return + if(!client) return 0 + + handle_regular_hud_updates() + handle_vision() + +/mob/proc/ghostize(var/can_reenter_corpse = 1) + if(key) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.vr_holder && !can_reenter_corpse) + H.exit_vr() + return 0 + var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc. + ghost.can_reenter_corpse = can_reenter_corpse + ghost.timeofdeath = src.timeofdeath //BS12 EDIT + ghost.key = key + if(istype(loc, /obj/structure/morgue)) + var/obj/structure/morgue/M = loc + M.update() + else if(istype(loc, /obj/structure/closet/body_bag)) + var/obj/structure/closet/body_bag/B = loc + B.update() + if(ghost.client) + ghost.client.time_died_as_mouse = ghost.timeofdeath + if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. + ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + return ghost + +/* +This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. +*/ +/mob/living/verb/ghost() + set category = "OOC" + set name = "Ghost" + set desc = "Relinquish your life and enter the land of the dead." + + if(stat == DEAD && !forbid_seeing_deadchat) + announce_ghost_joinleave(ghostize(1)) + else + var/response + if(src.client && src.client.holder) + response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Ghost", "Admin Ghost", "Stay in body")) + if(response == "Admin Ghost") + if(!src.client) + return + src.client.admin_ghost() + else + response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Ghost", "Stay in body")) // VOREStation edit because we don't make players stay dead for 30 minutes. + if(response != "Ghost") + return + resting = 1 + var/turf/location = get_turf(src) + var/special_role = check_special_role() + if(!istype(loc,/obj/machinery/cryopod)) + log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (
JMP)",usr) + else if(special_role) + log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr) + var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 + if(ghost) + ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. + ghost.set_respawn_timer() + announce_ghost_joinleave(ghost) + +/mob/observer/dead/can_use_hands() return 0 +/mob/observer/dead/is_active() return 0 + +/mob/observer/dead/Stat() + ..() + if(statpanel("Status")) + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + stat(null, eta_status) + +/mob/observer/dead/verb/reenter_corpse() + set category = "Ghost" + set name = "Re-enter Corpse" + if(!client) return + if(!(mind && mind.current && can_reenter_corpse)) + to_chat(src, "You have no body.") + return + if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients + to_chat(usr, "Another consciousness is in your body... it is resisting you.") + return + //VOREStation Add + if(prevent_respawns.Find(mind.name)) + to_chat(usr, "You already quit this round as this character, sorry!") + return + //VOREStation Add End + if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). + var/found_rune + for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune + if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune. + found_rune = 1 + break + if(!found_rune) + to_chat(usr, "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.") + return + mind.current.ajourn=0 + mind.current.key = key + mind.current.teleop = null + if(istype(mind.current.loc, /obj/structure/morgue)) + var/obj/structure/morgue/M = mind.current.loc + M.update(1) + else if(istype(mind.current.loc, /obj/structure/closet/body_bag)) + var/obj/structure/closet/body_bag/B = mind.current.loc + B.update(1) + if(!admin_ghosted) + announce_ghost_joinleave(mind, 0, "They now occupy their body again.") + return 1 + +/mob/observer/dead/verb/toggle_medHUD() + set category = "Ghost" + set name = "Toggle MedicHUD" + set desc = "Toggles Medical HUD allowing you to see how everyone is doing" + + medHUD = !medHUD + plane_holder.set_vis(VIS_CH_HEALTH, medHUD) + plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD) + to_chat(src, "Medical HUD [medHUD ? "Enabled" : "Disabled"]") + +/mob/observer/dead/verb/toggle_secHUD() + set category = "Ghost" + set name = "Toggle Security HUD" + set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc" + + secHUD = !secHUD + plane_holder.set_vis(VIS_CH_ID, secHUD) + plane_holder.set_vis(VIS_CH_WANTED, secHUD) + plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD) + plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD) + plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD) + to_chat(src, "Security HUD [secHUD ? "Enabled" : "Disabled"]") + +/mob/observer/dead/verb/toggle_antagHUD() + set category = "Ghost" + set name = "Toggle AntagHUD" + set desc = "Toggles AntagHUD allowing you to see who is the antagonist" + + if(!config.antag_hud_allowed && !client.holder) + to_chat(src, "Admins have disabled this for this round.") + return + if(jobban_isbanned(src, "AntagHUD")) + to_chat(src, "You have been banned from using this feature") + return + if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder) + var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No")) + if(response == "No") return + can_reenter_corpse = FALSE + set_respawn_timer(-1) // Foreeeever + if(!has_enabled_antagHUD && !client.holder) + has_enabled_antagHUD = TRUE + + antagHUD = !antagHUD + plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD) + to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]") + +/mob/observer/dead/proc/jumpable_areas() + var/list/areas = return_sorted_areas() + if(client?.holder) + return areas + + for(var/key in areas) + var/area/A = areas[key] + if(A.z in using_map?.secret_levels) + areas -= key + + return areas + +/mob/observer/dead/proc/jumpable_mobs() + var/list/mobs = getmobs() + if(client?.holder) + return mobs + + for(var/key in mobs) + var/mobz = get_z(mobs[key]) + if(mobz in using_map?.secret_levels) + mobs -= key + + return mobs + +/mob/observer/dead/verb/dead_tele(areaname as null|anything in jumpable_areas()) + set name = "Teleport" + set category = "Ghost" + set desc = "Teleport to a location." + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + var/area/A + + if(!areaname) + var/list/areas = jumpable_areas() + var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas) + if(!input) + return + A = areas[input] + if(!A) + return + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname]))) + usr.on_mob_jump() + +/mob/observer/dead/verb/follow(mobname as null|anything in jumpable_mobs()) + set name = "Follow" + set category = "Ghost" + set desc = "Follow and haunt a mob." + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + var/mob/M + + if(!mobname) + var/list/possible_mobs = jumpable_mobs() + var/input = tgui_input_list(usr, "Select a mob:", "Ghost Follow", possible_mobs) + if(!input) + return + M = possible_mobs[input] + if(!M) + return + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + ManualFollow(M || jumpable_mobs()[mobname]) + +/mob/observer/dead/forceMove(atom/destination) + if(client?.holder) + return ..() + + if(get_z(destination) in using_map?.secret_levels) + to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) + if(following) + stop_following() + return + + return ..() + +/mob/observer/dead/Move(atom/newloc, direct = 0, movetime) + if(client?.holder) + return ..() + + if(get_z(newloc) in using_map?.secret_levels) + to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) + if(following) + stop_following() + return + + return ..() + +// This is the ghost's follow verb with an argument +/mob/observer/dead/proc/ManualFollow(var/atom/movable/target) + if(!target) + return + + var/turf/targetloc = get_turf(target) + if(check_holy(targetloc)) + to_chat(usr, "You cannot follow a mob standing on holy grounds!") + return + if(get_z(target) in using_map?.secret_levels) + to_chat(src, SPAN_WARNING("Sorry, that target is in an area that ghosts aren't allowed to go.")) + return + if(target != src) + if(following && following == target) + return + following = target + to_chat(src, "Now following [target]") + if(ismob(target)) + forceMove(get_turf(target)) + var/mob/M = target + M.following_mobs += src + else + spawn(0) + while(target && following == target && client) + var/turf/T = get_turf(target) + if(!T) + break + // To stop the ghost flickering. + if(loc != T) + forceMove(T) + sleep(15) + + var/icon/I = icon(target.icon,target.icon_state,target.dir) + + var/orbitsize = (I.Width()+I.Height())*0.5 + orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) + + var/rot_seg + + /* We don't have this pref yet + switch(ghost_orbit) + if(GHOST_ORBIT_TRIANGLE) + rot_seg = 3 + if(GHOST_ORBIT_SQUARE) + rot_seg = 4 + if(GHOST_ORBIT_PENTAGON) + rot_seg = 5 + if(GHOST_ORBIT_HEXAGON) + rot_seg = 6 + else //Circular + rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle + */ + + orbit(target, orbitsize, FALSE, 20, rot_seg) + +/mob/observer/dead/orbit() + set_dir(2) //reset dir so the right directional sprites show up + return ..() + +/mob/observer/dead/stop_orbit() + . = ..() + //restart our floating animation after orbit is done. + pixel_y = 0 + pixel_x = 0 + transform = null + animate(src, pixel_y = 2, time = 10, loop = -1) + +/mob/observer/dead/proc/stop_following() + following = null + stop_orbit() + +/mob/proc/update_following() + . = get_turf(src) + for(var/mob/observer/dead/M in following_mobs) + if(!.) + M.stop_following() + + if(M.following != src) + following_mobs -= M + else + if(M.loc != .) + M.forceMove(.) + +/mob + var/list/following_mobs = list() + +/mob/Destroy() + for(var/mob/observer/dead/M in following_mobs) + M.stop_following() + following_mobs = null + return ..() + +/mob/observer/dead/Destroy() + if(ismob(following)) + var/mob/M = following + M.following_mobs -= src + stop_following() + observer_mob_list -= src + return ..() + +/mob/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + update_following() + +/mob/Life() + // to catch teleports etc which directly set loc + update_following() + return ..() + +/mob/proc/check_holy(var/turf/T) + return 0 + +/mob/observer/dead/check_holy(var/turf/T) + if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src)) + return 0 + + return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists)) + +/mob/observer/dead/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak + set category = "Ghost" + set name = "Jump to Mob" + set desc = "Teleport to a mob" + set popup_menu = FALSE + + if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer! + return + + var/list/possible_mobs = jumpable_mobs() + var/input = tgui_input_list(usr, "Select a mob:", "Ghost Jump", possible_mobs) + if(!input) + return + + var/target = possible_mobs[input] + if (!target)//Make sure we actually have a target + return + else + var/mob/M = target //Destination mob + var/turf/T = get_turf(M) //Turf of the destination mob + + if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. + forceMove(T) + stop_following() + else + to_chat(src, "This mob is not located in the game world.") + +/mob/observer/dead/memory() + set hidden = 1 + to_chat(src, "You are dead! You have no mind to store memory!") + +/mob/observer/dead/add_memory() + set hidden = 1 + to_chat(src, "You are dead! You have no mind to store memory!") + +/mob/observer/dead/Post_Incorpmove() + stop_following() + +/mob/observer/dead/verb/analyze_air() + set name = "Analyze Air" + set category = "Ghost" + + if(!istype(usr, /mob/observer/dead)) return + + // Shamelessly copied from the Gas Analyzers + if (!( istype(usr.loc, /turf) )) + return + + var/datum/gas_mixture/environment = usr.loc.return_air() + + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles + + to_chat(src, "Results:") + if(abs(pressure - ONE_ATMOSPHERE) < 10) + to_chat(src, "Pressure: [round(pressure,0.1)] kPa") + else + to_chat(src, "Pressure: [round(pressure,0.1)] kPa") + if(total_moles) + for(var/g in environment.gas) + to_chat(src, "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)") + to_chat(src, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)") + to_chat(src, "Heat Capacity: [round(environment.heat_capacity(),0.1)]") + +/mob/observer/dead/verb/check_radiation() + set name = "Check Radiation" + set category = "Ghost" + + var/turf/t = get_turf(src) + if(t) + var/rads = SSradiation.get_rads_at_turf(t) + to_chat(src, "Radiation level: [rads ? rads : "0"] Bq.") + + +/mob/observer/dead/verb/become_mouse() + set name = "Become mouse" + set category = "Ghost" + + if(config.disable_player_mice) + to_chat(src, "Spawning as a mouse is currently disabled.") + return + + if(!MayRespawn(1)) + return + + var/turf/T = get_turf(src) + if(!T || (T.z in using_map.admin_levels)) + to_chat(src, "You may not spawn as a mouse on this Z-level.") + return + + var/timedifference = world.time - client.time_died_as_mouse + if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600) + var/timedifference_text + timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss") + to_chat(src, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.") + return + + var/response = tgui_alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!")) + if(response != "Squeek!") return //Hit the wrong key...again. + + + //find a viable mouse candidate + var/mob/living/simple_mob/animal/passive/mouse/host + var/obj/machinery/atmospherics/unary/vent_pump/vent_found + var/list/found_vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines) + if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20) + found_vents.Add(v) + if(found_vents.len) + vent_found = pick(found_vents) + host = new /mob/living/simple_mob/animal/passive/mouse(vent_found) + else + to_chat(src, "Unable to find any unwelded vents to spawn mice at.") + + if(host) + if(config.uneducated_mice) + host.universal_understand = 0 + announce_ghost_joinleave(src, 0, "They are now a mouse.") + host.ckey = src.ckey + host.add_ventcrawl(vent_found) + to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") + +/mob/observer/dead/verb/view_manfiest() + set name = "Show Crew Manifest" + set category = "Ghost" + + var/dat + dat += "

Crew Manifest

" + dat += data_core.get_manifest() + + src << browse(dat, "window=manifest;size=370x420;can_close=1") + +//This is called when a ghost is drag clicked to something. +/mob/observer/dead/MouseDrop(atom/over) + if(!usr || !over) return + if (isobserver(usr) && usr.client && usr.client.holder && isliving(over)) + if (usr.client.holder.cmd_ghost_drag(src,over)) + return + + return ..() + +//Used for drawing on walls with blood puddles as a spooky ghost. +/mob/observer/dead/verb/bloody_doodle() + + set category = "Ghost" + set name = "Write in blood" + set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." + + if(!(config.cult_ghostwriter)) + to_chat(src, "That verb is not currently permitted.") + return + + if (!src.stat) + return + + if (usr != src) + return 0 //something is terribly wrong + + var/ghosts_can_write + if(ticker.mode.name == "cult") + if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists) + ghosts_can_write = 1 + + if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such. + to_chat(src, "The veil is not thin enough for you to do that.") + return + + var/list/choices = list() + for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) + if(B.amount > 0) + choices += B + + if(!choices.len) + to_chat(src, "There is no blood to use nearby.") + return + + var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices) + + var/direction = tgui_input_list(src,"Which way?","Tile selection", list("Here","North","South","East","West")) + var/turf/simulated/T = src.loc + if (direction != "Here") + T = get_step(T,text2dir(direction)) + + if (!istype(T)) + to_chat(src, "You cannot doodle there.") + return + + if(!choice || choice.amount == 0 || !(src.Adjacent(choice))) + return + + var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808" + + var/num_doodles = 0 + for (var/obj/effect/decal/cleanable/blood/writing/W in T) + num_doodles++ + if (num_doodles > 4) + to_chat(src, "There is no space to write on!") + return + + var/max_length = 50 + + var/message = sanitize(input(usr, "Write a message. It cannot be longer than [max_length] characters.","Blood writing", "")) + + if (message) + + if (length(message) > max_length) + message += "-" + to_chat(src, "You ran out of blood to write with!") + + var/obj/effect/decal/cleanable/blood/writing/W = new(T) + W.basecolor = doodle_color + W.update_icon() + W.message = message + W.add_hiddenprint(src) + W.visible_message("Invisible fingers crudely paint something in blood on [T]...") + +/mob/observer/dead/pointed(atom/A as mob|obj|turf in view()) + if(!..()) + return 0 + usr.visible_message("[src] points to [A]") + return 1 + +/mob/observer/dead/proc/manifest(mob/user) + is_manifest = TRUE + verbs |= /mob/observer/dead/proc/toggle_visibility + verbs |= /mob/observer/dead/proc/ghost_whisper + to_chat(src, "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.") + if(plane != PLANE_WORLD) + user.visible_message( \ + "\The [user] drags ghost, [src], to our plane of reality!", \ + "You drag [src] to our plane of reality!" \ + ) + toggle_visibility(TRUE) + else + var/datum/gender/T = gender_datums[user.get_visible_gender()] + user.visible_message ( \ + "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \ + "You get the feeling that the ghost can't become any more visible." \ + ) + +/mob/observer/dead/proc/toggle_icon(var/icon) + if(!client) + return + + var/iconRemoved = 0 + for(var/image/I in client.images) + if(I.icon_state == icon) + iconRemoved = 1 + qdel(I) + + if(!iconRemoved) + var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon) + client.images += J + +/mob/observer/dead/proc/toggle_visibility(var/forced = 0) + set category = "Ghost" + set name = "Toggle Visibility" + set desc = "Allows you to turn (in)visible (almost) at will." + + var/toggled_invisible + if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600) + to_chat(src, "You must gather strength before you can turn visible again...") + return + + if(plane == PLANE_WORLD) + toggled_invisible = world.time + visible_message("It fades from sight...", "You are now invisible.") + else + to_chat(src, "You are now visible!") + + plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS + invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER + + // Give the ghost a cult icon which should be visible only to itself + toggle_icon("cult") + +/mob/observer/dead/verb/toggle_anonsay() + set category = "Ghost" + set name = "Toggle Anonymous Chat" + set desc = "Toggles showing your key in dead chat." + + src.anonsay = !src.anonsay + if(anonsay) + to_chat(src, "Your key won't be shown when you speak in dead chat.") + else + to_chat(src, "Your key will be publicly visible again.") + +/mob/observer/dead/canface() + return 1 + +/mob/observer/dead/proc/can_admin_interact() + return check_rights(R_ADMIN|R_EVENT, 0, src) + +/mob/observer/dead/verb/toggle_ghostsee() + set name = "Toggle Ghost Vision" + set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" + set category = "Ghost" + ghostvision = !ghostvision + updateghostsight() + to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.") + +/mob/observer/dead/verb/toggle_darkness() + set name = "Toggle Darkness" + set desc = "Toggles your ability to see lighting overlays, and the darkness they create." + set category = "Ghost" + seedarkness = !seedarkness + updateghostsight() + to_chat(src, "You [seedarkness ? "now" : "no longer"] see darkness.") + +/mob/observer/dead/proc/updateghostsight() + plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) //Inversion, because "not seeing" the darkness is "seeing" the lighting plane master. + plane_holder.set_vis(VIS_GHOSTS, ghostvision) + +/mob/observer/dead/MayRespawn(var/feedback = 0) + if(!client) + return 0 + if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse) + if(feedback) + to_chat(src, "Your non-dead body prevent you from respawning.") + return 0 + if(config.antag_hud_restricted && has_enabled_antagHUD == 1) + if(feedback) + to_chat(src, "antagHUD restrictions prevent you from respawning.") + return 0 + return 1 + +/atom/proc/extra_ghost_link() + return + +/mob/extra_ghost_link(var/atom/ghost) + if(client && eyeobj) + return "|eye" + +/mob/observer/dead/extra_ghost_link(var/atom/ghost) + if(mind && mind.current) + return "|body" + +/proc/ghost_follow_link(var/atom/target, var/atom/ghost) + if((!target) || (!ghost)) return + . = "follow" + . += target.extra_ghost_link(ghost) + +//Culted Ghosts + +/mob/observer/dead/proc/ghost_whisper() + set name = "Spectral Whisper" + set category = "IC" + + if(is_manifest) //Only able to whisper if it's hit with a tome. + var/list/options = list() + for(var/mob/living/Ms in view(src)) + options += Ms + var/mob/living/M = tgui_input_list(src, "Select who to whisper to:", "Whisper to?", options) + if(!M) + return 0 + var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null) + if(msg) + log_say("(SPECWHISP to [key_name(M)]): [msg]", src) + to_chat(M, " You hear a strange, unidentifiable voice in your head... [msg]") + to_chat(src, " You said: '[msg]' to [M].") + else + return + return 1 + else + to_chat(src, "You have not been pulled past the veil!") + +/mob/observer/dead/verb/choose_ghost_sprite() + set category = "Ghost" + set name = "Choose Sprite" + + var/choice + var/previous_state + var/finalized = "No" + + while(finalized == "No" && src.client) + choice = tgui_input_list(usr, "What would you like to use for your ghost sprite?", "Ghost Sprite", possible_ghost_sprites) + if(!choice) + return + + if(choice) + icon = 'icons/mob/ghost.dmi' + cut_overlays() + + if(icon_state && icon) + previous_state = icon_state + + icon_state = possible_ghost_sprites[choice] + finalized = tgui_alert(src, "Look at your sprite. Is this what you wish to use?","Ghost Sprite",list("No","Yes")) + + ghost_sprite = possible_ghost_sprites[choice] + + if(finalized == "No") + icon_state = previous_state + +/mob/observer/dead/is_blind() + return FALSE + +/mob/observer/dead/is_deaf() + return FALSE + +/mob/observer/dead/verb/paialert() + set category = "Ghost" + set name = "Blank pAI alert" + set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope." + + if(usr.client.prefs?.be_special & BE_PAI) + var/count = 0 + for(var/obj/item/device/paicard/p in all_pai_cards) + var/obj/item/device/paicard/PP = p + if(PP.pai == null) + count++ + PP.icon = 'icons/obj/pda_vr.dmi' // VOREStation Edit + PP.add_overlay("pai-ghostalert") + spawn(54) + PP.cut_overlays() + to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.") + else + to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.") + +/mob/observer/dead/speech_bubble_appearance() + return "ghost" + +// Lets a ghost know someone's trying to bring them back, and for them to get into their body. +// Mostly the same as TG's sans the hud element, since we don't have TG huds. +/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source) + if((last_revive_notification + 2 MINUTES) > world.time) + return + last_revive_notification = world.time + + if(flashwindow) + window_flash(client) + if(message) + to_chat(src, "[message]") + if(source) + throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source) + to_chat(src, "(Click to re-enter)") + if(sound) + SEND_SOUND(src, sound(sound)) + +/mob/observer/dead/verb/respawn() + set name = "Respawn" + set category = "Ghost" + src.abandon_mob() +======= +/mob/observer + name = "observer" + desc = "This shouldn't appear" + density = FALSE + vis_flags = NONE + +/mob/observer/dead + name = "ghost" + desc = "It's a g-g-g-g-ghooooost!" //jinkies! + icon = 'icons/mob/ghost.dmi' + icon_state = "ghost" + stat = DEAD + canmove = 0 + blinded = 0 + anchored = TRUE // don't get pushed around + + var/can_reenter_corpse + var/datum/hud/living/carbon/hud = null // hud + var/bootime = 0 + var/started_as_observer //This variable is set to 1 when you enter the game as an observer. + //If you died in the game and are a ghsot - this will remain as null. + //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. + var/has_enabled_antagHUD = 0 + var/medHUD = 0 + var/secHUD = 0 + var/antagHUD = 0 + universal_speak = 1 + var/atom/movable/following = null + var/admin_ghosted = 0 + var/anonsay = 0 + var/ghostvision = 1 //is the ghost able to see things humans can't? + incorporeal_move = 1 + + var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil. + var/ghost_sprite = null + var/global/list/possible_ghost_sprites = list( + "Clear" = "blank", + "Green Blob" = "otherthing", + "Bland" = "ghost", + "Robed-B" = "ghost1", + "Robed-BAlt" = "ghost2", + "King" = "ghostking", + "Shade" = "shade", + "Hecate" = "ghost-narsie", + "Glowing Statue" = "armour", + "Artificer" = "artificer", + "Behemoth" = "behemoth", + "Harvester" = "harvester", + "Wraith" = "wraith", + "Viscerator" = "viscerator", + "Corgi" = "corgi", + "Tamaskan" = "tamaskan", + "Black Cat" = "blackcat", + "Lizard" = "lizard", + "Goat" = "goat", + "Space Bear" = "bear", + "Bats" = "bat", + "Chicken" = "chicken_white", + "Parrot"= "parrot_fly", + "Goose" = "goose", + "Penguin" = "penguin", + "Brown Crab" = "crab", + "Gray Crab" = "evilcrab", + "Trout" = "trout-swim", + "Salmon" = "salmon-swim", + "Pike" = "pike-swim", + "Koi" = "koi-swim", + "Carp" = "carp", + "Red Robes" = "robe_red", + "Faithless" = "faithless", + "Shadowform" = "forgotten", + "Dark Ethereal" = "bloodguardian", + "Holy Ethereal" = "lightguardian", + "Red Elemental" = "magicRed", + "Blue Elemental" = "magicBlue", + "Pink Elemental" = "magicPink", + "Orange Elemental" = "magicOrange", + "Green Elemental" = "magicGreen", + "Daemon" = "daemon", + "Guard Spider" = "guard", + "Hunter Spider" = "hunter", + "Nurse Spider" = "nurse", + "Rogue Drone" = "drone", + "ED-209" = "ed209", + "Beepsky" = "secbot" + ) + var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners. + var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns + +/mob/observer/dead/New(mob/body) + + appearance = body + invisibility = INVISIBILITY_OBSERVER + layer = BELOW_MOB_LAYER + plane = PLANE_GHOSTS + alpha = 127 + + sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF + see_invisible = SEE_INVISIBLE_OBSERVER + see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but... + + var/turf/T + if(ismob(body)) + T = get_turf(body) //Where is the body located? + attack_log = body.attack_log //preserve our attack logs by copying them to our ghost + gender = body.gender + if(body.mind && body.mind.name) + name = body.mind.name + else + if(body.real_name) + name = body.real_name + else + if(gender == MALE) + name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + else + name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) + + mind = body.mind //we don't transfer the mind but we keep a reference to it. + + // Fix for naked ghosts. + // Unclear why this isn't being grabbed by appearance. + if(ishuman(body)) + var/mob/living/carbon/human/H = body + add_overlay(H.overlays_standing) + + if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position + forceMove(T) + + if(!name) //To prevent nameless ghosts + name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + real_name = name + animate(src, pixel_y = 2, time = 10, loop = -1) + observer_mob_list += src + ..() + +/mob/observer/dead/Topic(href, href_list) + if (href_list["track"]) + var/mob/target = locate(href_list["track"]) in mob_list + if(target) + ManualFollow(target) + if(href_list["reenter"]) + reenter_corpse() + return + +/mob/observer/dead/attackby(obj/item/W, mob/user) + if(istype(W,/obj/item/weapon/book/tome)) + var/mob/observer/dead/M = src + M.manifest(user) + +/mob/observer/dead/CanPass(atom/movable/mover, turf/target) + return TRUE + +/mob/observer/dead/set_stat(var/new_stat) + if(new_stat != DEAD) + CRASH("It is best if observers stay dead, thank you.") + +/mob/observer/dead/examine_icon() + var/icon/I = get_cached_examine_icon(src) + if(!I) + I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE) + set_cached_examine_icon(src, I, 200 SECONDS) + return I + +/mob/observer/dead/examine(mob/user) + . = ..() + + if(is_admin(user)) + . += "\t>[ADMIN_FULLMONTY(src)]" + +/* +Transfer_mind is there to check if mob is being deleted/not going to have a body. +Works together with spawning an observer, noted above. +*/ + +/mob/observer/dead/Life() + ..() + if(!loc) return + if(!client) return 0 + + handle_regular_hud_updates() + handle_vision() + +/mob/proc/ghostize(var/can_reenter_corpse = 1) + if(key) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.vr_holder && !can_reenter_corpse) + H.exit_vr() + return 0 + var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc. + ghost.can_reenter_corpse = can_reenter_corpse + ghost.timeofdeath = src.timeofdeath //BS12 EDIT + ghost.key = key + if(istype(loc, /obj/structure/morgue)) + var/obj/structure/morgue/M = loc + M.update() + else if(istype(loc, /obj/structure/closet/body_bag)) + var/obj/structure/closet/body_bag/B = loc + B.update() + if(ghost.client) + ghost.client.time_died_as_mouse = ghost.timeofdeath + if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. + ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + return ghost + +/* +This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. +*/ +/mob/living/verb/ghost() + set category = "OOC" + set name = "Ghost" + set desc = "Relinquish your life and enter the land of the dead." + + if(stat == DEAD && !forbid_seeing_deadchat) + announce_ghost_joinleave(ghostize(1)) + else + var/response + if(src.client && src.client.holder) + response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Ghost", "Admin Ghost", "Stay in body")) + if(response == "Admin Ghost") + if(!src.client) + return + src.client.admin_ghost() + else + response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Ghost", "Stay in body")) // VOREStation edit because we don't make players stay dead for 30 minutes. + if(response != "Ghost") + return + resting = 1 + var/turf/location = get_turf(src) + var/special_role = check_special_role() + if(!istype(loc,/obj/machinery/cryopod)) + log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (JMP)",usr) + else if(special_role) + log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr) + var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 + if(ghost) + ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. + ghost.set_respawn_timer() + announce_ghost_joinleave(ghost) + +/mob/observer/dead/can_use_hands() return 0 +/mob/observer/dead/is_active() return 0 + +/mob/observer/dead/Stat() + ..() + if(statpanel("Status")) + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + stat(null, eta_status) + +/mob/observer/dead/verb/reenter_corpse() + set category = "Ghost" + set name = "Re-enter Corpse" + if(!client) return + if(!(mind && mind.current && can_reenter_corpse)) + to_chat(src, "You have no body.") + return + if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients + to_chat(usr, "Another consciousness is in your body... it is resisting you.") + return + //VOREStation Add + if(prevent_respawns.Find(mind.name)) + to_chat(usr, "You already quit this round as this character, sorry!") + return + //VOREStation Add End + if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). + var/found_rune + for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune + if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune. + found_rune = 1 + break + if(!found_rune) + to_chat(usr, "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.") + return + mind.current.ajourn=0 + mind.current.key = key + mind.current.teleop = null + if(istype(mind.current.loc, /obj/structure/morgue)) + var/obj/structure/morgue/M = mind.current.loc + M.update(1) + else if(istype(mind.current.loc, /obj/structure/closet/body_bag)) + var/obj/structure/closet/body_bag/B = mind.current.loc + B.update(1) + if(!admin_ghosted) + announce_ghost_joinleave(mind, 0, "They now occupy their body again.") + return 1 + +/mob/observer/dead/verb/toggle_medHUD() + set category = "Ghost" + set name = "Toggle MedicHUD" + set desc = "Toggles Medical HUD allowing you to see how everyone is doing" + + medHUD = !medHUD + plane_holder.set_vis(VIS_CH_HEALTH, medHUD) + plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD) + to_chat(src, "Medical HUD [medHUD ? "Enabled" : "Disabled"]") + +/mob/observer/dead/verb/toggle_secHUD() + set category = "Ghost" + set name = "Toggle Security HUD" + set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc" + + secHUD = !secHUD + plane_holder.set_vis(VIS_CH_ID, secHUD) + plane_holder.set_vis(VIS_CH_WANTED, secHUD) + plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD) + plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD) + plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD) + to_chat(src, "Security HUD [secHUD ? "Enabled" : "Disabled"]") + +/mob/observer/dead/verb/toggle_antagHUD() + set category = "Ghost" + set name = "Toggle AntagHUD" + set desc = "Toggles AntagHUD allowing you to see who is the antagonist" + + if(!config.antag_hud_allowed && !client.holder) + to_chat(src, "Admins have disabled this for this round.") + return + if(jobban_isbanned(src, "AntagHUD")) + to_chat(src, "You have been banned from using this feature") + return + if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder) + var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No")) + if(response == "No") return + can_reenter_corpse = FALSE + set_respawn_timer(-1) // Foreeeever + if(!has_enabled_antagHUD && !client.holder) + has_enabled_antagHUD = TRUE + + antagHUD = !antagHUD + plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD) + to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]") + +/mob/observer/dead/proc/jumpable_areas() + var/list/areas = return_sorted_areas() + if(client?.holder) + return areas + + for(var/key in areas) + var/area/A = areas[key] + if(A.z in using_map?.secret_levels) + areas -= key + + return areas + +/mob/observer/dead/proc/jumpable_mobs() + var/list/mobs = getmobs() + if(client?.holder) + return mobs + + for(var/key in mobs) + var/mobz = get_z(mobs[key]) + if(mobz in using_map?.secret_levels) + mobs -= key + + return mobs + +/mob/observer/dead/verb/dead_tele(areaname as null|anything in jumpable_areas()) + set name = "Teleport" + set category = "Ghost" + set desc = "Teleport to a location." + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + var/area/A + + if(!areaname) + var/list/areas = jumpable_areas() + var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas) + if(!input) + return + A = areas[input] + if(!A) + return + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname]))) + usr.on_mob_jump() + +/mob/observer/dead/verb/follow(mobname as null|anything in jumpable_mobs()) + set name = "Follow" + set category = "Ghost" + set desc = "Follow and haunt a mob." + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + var/mob/M + + if(!mobname) + var/list/possible_mobs = jumpable_mobs() + var/input = tgui_input_list(usr, "Select a mob:", "Ghost Follow", possible_mobs) + if(!input) + return + M = possible_mobs[input] + if(!M) + return + + if(!istype(usr, /mob/observer/dead)) + to_chat(usr, "Not when you're not dead!") + return + + ManualFollow(M || jumpable_mobs()[mobname]) + +/mob/observer/dead/forceMove(atom/destination) + if(client?.holder) + return ..() + + if(get_z(destination) in using_map?.secret_levels) + to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) + if(following) + stop_following() + return + + return ..() + +/mob/observer/dead/Move(atom/newloc, direct = 0, movetime) + if(client?.holder) + return ..() + + if(get_z(newloc) in using_map?.secret_levels) + to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) + if(following) + stop_following() + return + + return ..() + +// This is the ghost's follow verb with an argument +/mob/observer/dead/proc/ManualFollow(var/atom/movable/target) + if(!target) + return + + var/turf/targetloc = get_turf(target) + if(check_holy(targetloc)) + to_chat(usr, "You cannot follow a mob standing on holy grounds!") + return + if(get_z(target) in using_map?.secret_levels) + to_chat(src, SPAN_WARNING("Sorry, that target is in an area that ghosts aren't allowed to go.")) + return + if(target != src) + if(following && following == target) + return + following = target + to_chat(src, "Now following [target]") + if(ismob(target)) + forceMove(get_turf(target)) + var/mob/M = target + M.following_mobs += src + else + spawn(0) + while(target && following == target && client) + var/turf/T = get_turf(target) + if(!T) + break + // To stop the ghost flickering. + if(loc != T) + forceMove(T) + sleep(15) + + var/icon/I = icon(target.icon,target.icon_state,target.dir) + + var/orbitsize = (I.Width()+I.Height())*0.5 + orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) + + var/rot_seg + + /* We don't have this pref yet + switch(ghost_orbit) + if(GHOST_ORBIT_TRIANGLE) + rot_seg = 3 + if(GHOST_ORBIT_SQUARE) + rot_seg = 4 + if(GHOST_ORBIT_PENTAGON) + rot_seg = 5 + if(GHOST_ORBIT_HEXAGON) + rot_seg = 6 + else //Circular + rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle + */ + + orbit(target, orbitsize, FALSE, 20, rot_seg) + +/mob/observer/dead/orbit() + set_dir(2) //reset dir so the right directional sprites show up + return ..() + +/mob/observer/dead/stop_orbit() + . = ..() + //restart our floating animation after orbit is done. + pixel_y = 0 + pixel_x = 0 + transform = null + animate(src, pixel_y = 2, time = 10, loop = -1) + +/mob/observer/dead/proc/stop_following() + following = null + stop_orbit() + +/mob/proc/update_following() + . = get_turf(src) + for(var/mob/observer/dead/M in following_mobs) + if(!.) + M.stop_following() + + if(M.following != src) + following_mobs -= M + else + if(M.loc != .) + M.forceMove(.) + +/mob + var/list/following_mobs = list() + +/mob/Destroy() + for(var/mob/observer/dead/M in following_mobs) + M.stop_following() + following_mobs = null + return ..() + +/mob/observer/dead/Destroy() + if(ismob(following)) + var/mob/M = following + M.following_mobs -= src + stop_following() + observer_mob_list -= src + return ..() + +/mob/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + update_following() + +/mob/Life() + // to catch teleports etc which directly set loc + update_following() + return ..() + +/mob/proc/check_holy(var/turf/T) + return 0 + +/mob/observer/dead/check_holy(var/turf/T) + if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src)) + return 0 + + return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists)) + +/mob/observer/dead/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak + set category = "Ghost" + set name = "Jump to Mob" + set desc = "Teleport to a mob" + set popup_menu = FALSE + + if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer! + return + + var/list/possible_mobs = jumpable_mobs() + var/input = tgui_input_list(usr, "Select a mob:", "Ghost Jump", possible_mobs) + if(!input) + return + + var/target = possible_mobs[input] + if (!target)//Make sure we actually have a target + return + else + var/mob/M = target //Destination mob + var/turf/T = get_turf(M) //Turf of the destination mob + + if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. + forceMove(T) + stop_following() + else + to_chat(src, "This mob is not located in the game world.") + +/mob/observer/dead/memory() + set hidden = 1 + to_chat(src, "You are dead! You have no mind to store memory!") + +/mob/observer/dead/add_memory() + set hidden = 1 + to_chat(src, "You are dead! You have no mind to store memory!") + +/mob/observer/dead/Post_Incorpmove() + stop_following() + +/mob/observer/dead/verb/analyze_air() + set name = "Analyze Air" + set category = "Ghost" + + if(!istype(usr, /mob/observer/dead)) return + + // Shamelessly copied from the Gas Analyzers + if (!( istype(usr.loc, /turf) )) + return + + var/datum/gas_mixture/environment = usr.loc.return_air() + + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles + + to_chat(src, "Results:") + if(abs(pressure - ONE_ATMOSPHERE) < 10) + to_chat(src, "Pressure: [round(pressure,0.1)] kPa") + else + to_chat(src, "Pressure: [round(pressure,0.1)] kPa") + if(total_moles) + for(var/g in environment.gas) + to_chat(src, "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)") + to_chat(src, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)") + to_chat(src, "Heat Capacity: [round(environment.heat_capacity(),0.1)]") + +/mob/observer/dead/verb/check_radiation() + set name = "Check Radiation" + set category = "Ghost" + + var/turf/t = get_turf(src) + if(t) + var/rads = SSradiation.get_rads_at_turf(t) + to_chat(src, "Radiation level: [rads ? rads : "0"] Bq.") + + +/mob/observer/dead/verb/become_mouse() + set name = "Become mouse" + set category = "Ghost" + + if(config.disable_player_mice) + to_chat(src, "Spawning as a mouse is currently disabled.") + return + + if(!MayRespawn(1)) + return + + var/turf/T = get_turf(src) + if(!T || (T.z in using_map.admin_levels)) + to_chat(src, "You may not spawn as a mouse on this Z-level.") + return + + var/timedifference = world.time - client.time_died_as_mouse + if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600) + var/timedifference_text + timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss") + to_chat(src, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.") + return + + var/response = tgui_alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!")) + if(response != "Squeek!") return //Hit the wrong key...again. + + + //find a viable mouse candidate + var/mob/living/simple_mob/animal/passive/mouse/host + var/obj/machinery/atmospherics/unary/vent_pump/vent_found + var/list/found_vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines) + if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20) + found_vents.Add(v) + if(found_vents.len) + vent_found = pick(found_vents) + host = new /mob/living/simple_mob/animal/passive/mouse(vent_found) + else + to_chat(src, "Unable to find any unwelded vents to spawn mice at.") + + if(host) + if(config.uneducated_mice) + host.universal_understand = 0 + announce_ghost_joinleave(src, 0, "They are now a mouse.") + host.ckey = src.ckey + host.add_ventcrawl(vent_found) + to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") + +/mob/observer/dead/verb/view_manfiest() + set name = "Show Crew Manifest" + set category = "Ghost" + + var/dat + dat += "

Crew Manifest

" + dat += data_core.get_manifest() + + src << browse(dat, "window=manifest;size=370x420;can_close=1") + +//This is called when a ghost is drag clicked to something. +/mob/observer/dead/MouseDrop(atom/over) + if(!usr || !over) return + if (isobserver(usr) && usr.client && usr.client.holder && isliving(over)) + if (usr.client.holder.cmd_ghost_drag(src,over)) + return + + return ..() + +//Used for drawing on walls with blood puddles as a spooky ghost. +/mob/observer/dead/verb/bloody_doodle() + + set category = "Ghost" + set name = "Write in blood" + set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." + + if(!(config.cult_ghostwriter)) + to_chat(src, "That verb is not currently permitted.") + return + + if (!src.stat) + return + + if (usr != src) + return 0 //something is terribly wrong + + var/ghosts_can_write + if(ticker.mode.name == "cult") + if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists) + ghosts_can_write = 1 + + if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such. + to_chat(src, "The veil is not thin enough for you to do that.") + return + + var/list/choices = list() + for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) + if(B.amount > 0) + choices += B + + if(!choices.len) + to_chat(src, "There is no blood to use nearby.") + return + + var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices) + + var/direction = tgui_input_list(src,"Which way?","Tile selection", list("Here","North","South","East","West")) + var/turf/simulated/T = src.loc + if (direction != "Here") + T = get_step(T,text2dir(direction)) + + if (!istype(T)) + to_chat(src, "You cannot doodle there.") + return + + if(!choice || choice.amount == 0 || !(src.Adjacent(choice))) + return + + var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808" + + var/num_doodles = 0 + for (var/obj/effect/decal/cleanable/blood/writing/W in T) + num_doodles++ + if (num_doodles > 4) + to_chat(src, "There is no space to write on!") + return + + var/max_length = 50 + + var/message = sanitize(input(usr, "Write a message. It cannot be longer than [max_length] characters.","Blood writing", "")) + + if (message) + + if (length(message) > max_length) + message += "-" + to_chat(src, "You ran out of blood to write with!") + + var/obj/effect/decal/cleanable/blood/writing/W = new(T) + W.basecolor = doodle_color + W.update_icon() + W.message = message + W.add_hiddenprint(src) + W.visible_message("Invisible fingers crudely paint something in blood on [T]...") + +/mob/observer/dead/pointed(atom/A as mob|obj|turf in view()) + if(!..()) + return 0 + usr.visible_message("[src] points to [A]") + return 1 + +/mob/observer/dead/proc/manifest(mob/user) + is_manifest = TRUE + verbs |= /mob/observer/dead/proc/toggle_visibility + verbs |= /mob/observer/dead/proc/ghost_whisper + to_chat(src, "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.") + if(plane != PLANE_WORLD) + user.visible_message( \ + "\The [user] drags ghost, [src], to our plane of reality!", \ + "You drag [src] to our plane of reality!" \ + ) + toggle_visibility(TRUE) + else + var/datum/gender/T = gender_datums[user.get_visible_gender()] + user.visible_message ( \ + "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \ + "You get the feeling that the ghost can't become any more visible." \ + ) + +/mob/observer/dead/proc/toggle_icon(var/icon) + if(!client) + return + + var/iconRemoved = 0 + for(var/image/I in client.images) + if(I.icon_state == icon) + iconRemoved = 1 + qdel(I) + + if(!iconRemoved) + var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon) + client.images += J + +/mob/observer/dead/proc/toggle_visibility(var/forced = 0) + set category = "Ghost" + set name = "Toggle Visibility" + set desc = "Allows you to turn (in)visible (almost) at will." + + var/toggled_invisible + if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600) + to_chat(src, "You must gather strength before you can turn visible again...") + return + + if(plane == PLANE_WORLD) + toggled_invisible = world.time + visible_message("It fades from sight...", "You are now invisible.") + else + to_chat(src, "You are now visible!") + + plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS + invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER + + // Give the ghost a cult icon which should be visible only to itself + toggle_icon("cult") + +/mob/observer/dead/verb/toggle_anonsay() + set category = "Ghost" + set name = "Toggle Anonymous Chat" + set desc = "Toggles showing your key in dead chat." + + src.anonsay = !src.anonsay + if(anonsay) + to_chat(src, "Your key won't be shown when you speak in dead chat.") + else + to_chat(src, "Your key will be publicly visible again.") + +/mob/observer/dead/canface() + return 1 + +/mob/observer/dead/proc/can_admin_interact() + return check_rights(R_ADMIN|R_EVENT, 0, src) + +/mob/observer/dead/verb/toggle_ghostsee() + set name = "Toggle Ghost Vision" + set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" + set category = "Ghost" + ghostvision = !ghostvision + updateghostsight() + to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.") + +/mob/observer/dead/verb/toggle_darkness() + set name = "Toggle Darkness" + set desc = "Toggles your ability to see lighting overlays, and the darkness they create." + set category = "Ghost" + seedarkness = !seedarkness + updateghostsight() + to_chat(src, "You [seedarkness ? "now" : "no longer"] see darkness.") + +/mob/observer/dead/proc/updateghostsight() + plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) //Inversion, because "not seeing" the darkness is "seeing" the lighting plane master. + plane_holder.set_vis(VIS_GHOSTS, ghostvision) + +/mob/observer/dead/MayRespawn(var/feedback = 0) + if(!client) + return 0 + if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse) + if(feedback) + to_chat(src, "Your non-dead body prevent you from respawning.") + return 0 + if(config.antag_hud_restricted && has_enabled_antagHUD == 1) + if(feedback) + to_chat(src, "antagHUD restrictions prevent you from respawning.") + return 0 + return 1 + +/atom/proc/extra_ghost_link() + return + +/mob/extra_ghost_link(var/atom/ghost) + if(client && eyeobj) + return "|eye" + +/mob/observer/dead/extra_ghost_link(var/atom/ghost) + if(mind && mind.current) + return "|body" + +/proc/ghost_follow_link(var/atom/target, var/atom/ghost) + if((!target) || (!ghost)) return + . = "follow" + . += target.extra_ghost_link(ghost) + +//Culted Ghosts + +/mob/observer/dead/proc/ghost_whisper() + set name = "Spectral Whisper" + set category = "IC" + + if(is_manifest) //Only able to whisper if it's hit with a tome. + var/list/options = list() + for(var/mob/living/Ms in view(src)) + options += Ms + var/mob/living/M = tgui_input_list(src, "Select who to whisper to:", "Whisper to?", options) + if(!M) + return 0 + var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null) + if(msg) + log_say("(SPECWHISP to [key_name(M)]): [msg]", src) + to_chat(M, " You hear a strange, unidentifiable voice in your head... [msg]") + to_chat(src, " You said: '[msg]' to [M].") + else + return + return 1 + else + to_chat(src, "You have not been pulled past the veil!") + +/mob/observer/dead/verb/choose_ghost_sprite() + set category = "Ghost" + set name = "Choose Sprite" + + var/choice + var/previous_state + var/finalized = "No" + + while(finalized == "No" && src.client) + choice = tgui_input_list(usr, "What would you like to use for your ghost sprite?", "Ghost Sprite", possible_ghost_sprites) + if(!choice) + return + + if(choice) + icon = 'icons/mob/ghost.dmi' + cut_overlays() + + if(icon_state && icon) + previous_state = icon_state + + icon_state = possible_ghost_sprites[choice] + finalized = tgui_alert(src, "Look at your sprite. Is this what you wish to use?","Ghost Sprite",list("No","Yes")) + + ghost_sprite = possible_ghost_sprites[choice] + + if(finalized == "No") + icon_state = previous_state + +/mob/observer/dead/is_blind() + return FALSE + +/mob/observer/dead/is_deaf() + return FALSE + +/mob/observer/dead/verb/paialert() + set category = "Ghost" + set name = "Blank pAI alert" + set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope." + + if(usr.client.prefs?.be_special & BE_PAI) + var/count = 0 + for(var/obj/item/device/paicard/p in all_pai_cards) + var/obj/item/device/paicard/PP = p + if(PP.pai == null) + count++ + PP.icon = 'icons/obj/pda_vr.dmi' // VOREStation Edit + PP.add_overlay("pai-ghostalert") + spawn(54) + PP.cut_overlays() + to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.") + else + to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.") + +/mob/observer/dead/speech_bubble_appearance() + return "ghost" + +// Lets a ghost know someone's trying to bring them back, and for them to get into their body. +// Mostly the same as TG's sans the hud element, since we don't have TG huds. +/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source) + if((last_revive_notification + 2 MINUTES) > world.time) + return + last_revive_notification = world.time + + if(flashwindow) + window_flash(client) + if(message) + to_chat(src, "[message]") + if(source) + throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source) + to_chat(src, "(Click to re-enter)") + if(sound) + SEND_SOUND(src, sound(sound)) + +/mob/observer/dead/verb/respawn() + set name = "Respawn" + set category = "Ghost" + src.abandon_mob() +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) diff --git a/code/modules/mob/living/bot/SLed209bot.dm b/code/modules/mob/living/bot/SLed209bot.dm index c4fd4b2767..82f3c43cc2 100644 --- a/code/modules/mob/living/bot/SLed209bot.dm +++ b/code/modules/mob/living/bot/SLed209bot.dm @@ -3,7 +3,7 @@ desc = "A security robot. He looks less than thrilled." icon = 'icons/obj/aibots.dmi' icon_state = "sled2090" - density = 1 + density = TRUE health = 200 maxHealth = 200 diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index e2ba25cec0..9e47e4e702 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/aibots.dmi' layer = MOB_LAYER universal_speak = 1 - density = 0 + density = FALSE makes_dirt = FALSE // No more dirt from Beepsky diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm index f0e58c455f..17d2da7878 100644 --- a/code/modules/mob/living/bot/ed209bot.dm +++ b/code/modules/mob/living/bot/ed209bot.dm @@ -3,7 +3,7 @@ desc = "A security robot. He looks less than thrilled." icon = 'icons/obj/aibots.dmi' icon_state = "ed2090" - density = 1 + density = TRUE health = 200 maxHealth = 200 diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index 66d5a595cf..0f851d6dd5 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -11,8 +11,8 @@ name = "Mulebot" desc = "A Multiple Utility Load Effector bot." icon_state = "mulebot0" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE health = 150 maxHealth = 150 mob_bump_flag = HEAVY diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index a035861265..d1a309c410 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -14,7 +14,7 @@ target_speed = 3 max_frustration = 7 //CHOMPEdit - density = 1 + density = TRUE var/default_icon_state = "secbot" var/idcheck = FALSE // If true, arrests for having weapons without authorization. diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm index 2755255252..3b38201206 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack.dm @@ -3,8 +3,8 @@ attack_verb = list("bit", "chomped on") attack_sound = 'sound/weapons/bite.ogg' shredding = 0 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /datum/unarmed_attack/diona attack_name = "tendrils" @@ -21,8 +21,8 @@ eye_attack_text_victim = "sharp claws" attack_sound = 'sound/weapons/slice.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) var/skill = user.skills["combat"] diff --git a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm index 2742b66a60..bff44609ea 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm @@ -3,8 +3,8 @@ attack_noun = list("fangs") attack_sound = 'sound/weapons/bite.ogg' shredding = 0 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /datum/unarmed_attack/bite/sharp/numbing/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm index a315c8218e..cd5f64e5c6 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/weaver_objs.dm @@ -4,8 +4,8 @@ name = "weaversilk web" desc = "A thin layer of fiberous webs. It looks like it can be torn down with one strong hit." icon = 'icons/vore/weaver_icons_vr.dmi' - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE /obj/effect/weaversilk/ex_act(severity) qdel(src) @@ -50,7 +50,7 @@ desc = "A thin layer of fiberous webs, but just thick enough to block your way. It looks like it can be torn down with one strong hit." icon_state = "wallweb1" var/possible_icon_states = list("wallweb1", "wallweb2", "wallweb3") - density = 1 + density = TRUE /obj/effect/weaversilk/wall/Initialize() ..() diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index 2c70b6dacc..7fbdfd590b 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -9,8 +9,8 @@ var/global/list/sparring_attack_cache = list() var/attack_sound = "punch" var/miss_sound = 'sound/weapons/punchmiss.ogg' var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. - var/sharp = 0 - var/edge = 0 + var/sharp = FALSE + var/edge = FALSE var/damage_type = BRUTE var/sparring_variant_type = /datum/unarmed_attack/light_strike @@ -115,8 +115,8 @@ var/global/list/sparring_attack_cache = list() attack_sound = 'sound/weapons/bite.ogg' shredding = 0 damage = 0 - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE /datum/unarmed_attack/bite/event1 @@ -281,5 +281,13 @@ var/global/list/sparring_attack_cache = list() damage_type = AGONY shredding = 0 damage = 0 +<<<<<<< HEAD sharp = 0 edge = 0 +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) + sharp = 0 + edge = 0 +======= + sharp = FALSE + edge = FALSE +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) diff --git a/code/modules/mob/living/carbon/metroid/items.dm b/code/modules/mob/living/carbon/metroid/items.dm index 45c30cb3e3..cc04791e04 100644 --- a/code/modules/mob/living/carbon/metroid/items.dm +++ b/code/modules/mob/living/carbon/metroid/items.dm @@ -256,12 +256,12 @@ qdel(src)*/ */ /obj/effect/golemrune - anchored = 1 + anchored = TRUE desc = "a strange rune used to create golems. It glows when spirits are nearby." name = "rune" icon = 'icons/obj/rune.dmi' icon_state = "golem" - unacidable = 1 + unacidable = TRUE layer = TURF_LAYER New() diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index 2b55a95afc..8da3a5debd 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -32,7 +32,7 @@ Victim = M loc = M.loc canmove = 0 - anchored = 1 + anchored = TRUE regenerate_icons() @@ -81,7 +81,7 @@ break canmove = 1 - anchored = 0 + anchored = FALSE if(M && invalidFeedTarget(M)) // This means that the slime drained the victim if(!client) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 634ae06b52..592d7d0db2 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -833,21 +833,21 @@ if(!V.riding_datum) // If it has a riding datum, the datum handles moving the pixel_ vars. pixel_y = V.mob_offset_y else if(buckled) - anchored = 1 + anchored = TRUE canmove = 1 //The line above already makes the chair not swooce away if the sitter presses a button. No need to incapacitate them as a criminally large amount of mechanics read this var as a type of stun. if(istype(buckled)) if(buckled.buckle_lying != -1) lying = buckled.buckle_lying canmove = buckled.buckle_movable if(buckled.buckle_movable) - anchored = 0 + anchored = FALSE canmove = 1 else lying = incapacitated(INCAPACITATION_KNOCKDOWN) canmove = !incapacitated(INCAPACITATION_DISABLED) if(lying) - density = 0 + density = FALSE if(l_hand) unEquip(l_hand) if(r_hand) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index e19fa16745..2a0a307818 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -44,8 +44,8 @@ var/list/ai_verbs_default = list( name = "AI" icon = 'icons/mob/AI.dmi'// icon_state = "ai" - anchored = 1 // -- TLE - density = 1 + anchored = TRUE // -- TLE + density = TRUE status_flags = CANSTUN|CANPARALYSE|CANPUSH shouldnt_see = list(/mob/observer/eye, /obj/effect/rune) var/list/network = list(NETWORK_DEFAULT) @@ -124,9 +124,9 @@ var/list/ai_verbs_default = list( if(!is_dummy) aiPDA = new/obj/item/device/pda/ai(src) SetName(pickedName) - anchored = 1 + anchored = TRUE canmove = 0 - density = 1 + density = TRUE loc = loc if(!is_dummy) @@ -761,7 +761,7 @@ var/list/ai_verbs_default = list( user.visible_message("\The [user] decides not to unbolt \the [src].") return user.visible_message("\The [user] finishes unfastening \the [src]!") - anchored = 0 + anchored = FALSE return else playsound(src, W.usesound, 50, 1) @@ -770,7 +770,7 @@ var/list/ai_verbs_default = list( user.visible_message("\The [user] decides not to bolt \the [src].") return user.visible_message("\The [user] finishes fastening down \the [src]!") - anchored = 1 + anchored = TRUE return else return ..() diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index d6d5baf1d9..9c26f64c43 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -20,4 +20,4 @@ card.update_icon() . = ..(gibbed,"gives one shrill beep before falling lifeless.") - density = 1 + density = TRUE diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm index bbbfe19dad..5cb485a571 100644 --- a/code/modules/mob/living/silicon/decoy/decoy.dm +++ b/code/modules/mob/living/silicon/decoy/decoy.dm @@ -2,7 +2,7 @@ name = "AI" icon = 'icons/mob/AI.dmi'// icon_state = "ai" - anchored = 1 // -- TLE + anchored = TRUE // -- TLE canmove = 0 /mob/living/silicon/decoy/New() diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index af07971ed7..eb6dc881a9 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -336,8 +336,8 @@ icon_state = "swordtail" desc = "A glowing pink dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp." force = 20 //Takes 5 hits to 100-0 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE throwforce = 0 //This shouldn't be thrown in the first place. hitsound = 'sound/weapons/blade1.ogg' attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced") diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index d615f41290..aca27b3791 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -32,7 +32,7 @@ var/list/mob_hat_cache = list() pass_flags = PASSTABLE braintype = "Drone" lawupdate = 0 - density = 1 + density = TRUE req_access = list(access_engine, access_robotics) integrated_light_power = 3 local_transmit = 1 diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index a3e8d71f48..22851e5632 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -9,8 +9,8 @@ desc = "A large automated factory for producing maintenance drones." appearance_flags = 0 - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 20 active_power_usage = 5000 diff --git a/code/modules/mob/living/silicon/robot/drone/swarm.dm b/code/modules/mob/living/silicon/robot/drone/swarm.dm index 3db976437b..153594801c 100644 --- a/code/modules/mob/living/silicon/robot/drone/swarm.dm +++ b/code/modules/mob/living/silicon/robot/drone/swarm.dm @@ -14,7 +14,7 @@ pass_flags = PASSTABLE braintype = "Drone" lawupdate = 0 - density = 1 + density = TRUE idcard_type = /obj/item/weapon/card/id/syndicate req_access = list(999) integrated_light_power = 3 diff --git a/code/modules/mob/living/simple_mob/life.dm b/code/modules/mob/living/simple_mob/life.dm index 493a68e43b..05d7d8a4a3 100644 --- a/code/modules/mob/living/simple_mob/life.dm +++ b/code/modules/mob/living/simple_mob/life.dm @@ -151,7 +151,7 @@ purge -= 1 /mob/living/simple_mob/death(gibbed, deathmessage = "dies!") - density = 0 //We don't block even if we did before + density = FALSE //We don't block even if we did before if(has_eye_glow) remove_eyes() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm index c0c44250a8..6f7e6f4626 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm @@ -85,7 +85,7 @@ melee_damage_lower = 18 melee_damage_upper = 30 - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attack_sound = 'sound/weapons/bite.ogg' diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 8fe1799d12..1a2094c15d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -21,7 +21,7 @@ // can_pull_size = ITEMSIZE_TINY // can_pull_mobs = MOB_PULL_NONE layer = MOB_LAYER - density = 0 + density = FALSE response_help = "pets" response_disarm = "gently pushes aside" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm index 614a15a5b3..329655a808 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm @@ -126,7 +126,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stamps on" - density = 0 + density = FALSE minbodytemp = 223 maxbodytemp = 323 universal_speak = FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm index dcdfdf04f0..989ca0266b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm @@ -34,7 +34,7 @@ melee_damage_lower = 2 melee_damage_upper = 6 base_attack_cooldown = 1 SECOND - attack_sharp = 1 //Bleeds, but it shouldn't rip off a limb? + attack_sharp = TRUE //Bleeds, but it shouldn't rip off a limb? attacktext = list("gouged") say_list_type = /datum/say_list/diyaab diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm index e796cd488b..5b67a8604c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm @@ -52,7 +52,7 @@ mob_size = MOB_SMALL pass_flags = PASSTABLE layer = MOB_LAYER - density = 0 + density = FALSE response_help = "pets" response_disarm = "nudges" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm index 40ae65d3bc..f649e5a68f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm @@ -35,7 +35,7 @@ melee_damage_lower = 10 melee_damage_upper = 15 base_attack_cooldown = 1 SECOND - attack_sharp = 1 + attack_sharp = TRUE attacktext = list("sliced", "snapped", "gnawed") say_list_type = /datum/say_list/siffet diff --git a/code/modules/mob/living/simple_mob/subtypes/horror/Master.dm b/code/modules/mob/living/simple_mob/subtypes/horror/Master.dm index b76cc5cddd..430cb4e865 100644 --- a/code/modules/mob/living/simple_mob/subtypes/horror/Master.dm +++ b/code/modules/mob/living/simple_mob/subtypes/horror/Master.dm @@ -10,7 +10,7 @@ icon = 'icons/mob/horror_show/master.dmi' vis_height = 64 icon_gib = "generic_gib" - anchored = 1 + anchored = TRUE attack_sound = 'sound/h_sounds/shitty_tim.ogg' diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm index 2770d6ff98..cf6b2649a8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm @@ -25,7 +25,7 @@ melee_damage_lower = 15 //Tac Knife damage melee_damage_upper = 15 attack_armor_pen = 20 - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attacktext = list("slashed", "stabbed") armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 100) // Same armor values as the vest they drop, plus simple mob immunities @@ -112,7 +112,7 @@ melee_damage_lower = 30 melee_damage_upper = 30 attack_armor_pen = 50 - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attacktext = list("slashed") diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm index 3927b1dcf1..253bfb73b8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm @@ -16,7 +16,7 @@ melee_damage_lower = 30 melee_damage_upper = 30 attack_armor_pen = 30 - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attacktext = list("slashed") diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm index f71242a637..a75c0c2f2f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/corrupt_maint_drone_vr.dm @@ -39,7 +39,7 @@ melee_damage_lower = 6 // Approx 12 DPS. melee_damage_upper = 6 base_attack_cooldown = 2.5 // Four attacks per second. - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attack_sound = 'sound/weapons/bladeslice.ogg' attacktext = list("cut", "sliced") diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm index 4545057bc6..87e8b4223e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm @@ -40,7 +40,7 @@ melee_damage_lower = 4 // Approx 8 DPS. melee_damage_upper = 4 base_attack_cooldown = 5 // Two attacks a second or so. - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attack_sound = 'sound/weapons/bladeslice.ogg' attacktext = list("cut", "sliced") diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm index 9328d9cffd..a161548d99 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm @@ -14,7 +14,7 @@ health = 150 melee_damage_lower = 20 melee_damage_upper = 25 - attack_sharp = 1 + attack_sharp = TRUE attacktext = list("violently stabbed") friendly = list("caresses") movement_cooldown = 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm index 13580bc845..0b8f69c7a9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm @@ -15,7 +15,7 @@ melee_damage_lower = 25 melee_damage_upper = 30 attack_armor_pen = 15 - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attacktext = list("slashed") friendly = list("pinches") diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm index 3cc9df4fa3..fe385ee60b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm @@ -18,7 +18,7 @@ melee_damage_lower = 8 melee_damage_upper = 15 attack_armor_pen = 5 //It's a horror from beyond, I ain't gotta explain 5 AP - attack_sharp = 1 + attack_sharp = TRUE attack_edge = 1 attacktext = list("chomped") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index 75e1c81a6c..dcf22bf93b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -82,7 +82,7 @@ var/global/list/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawst var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() sparks.set_up(5, 0, get_turf(src)) sparks.start() - anchored = 1 + anchored = TRUE PN = attached.powernet PN.draw_power(powerdraw) // previous value 150000 // CHOMPEDIT Start, Rykka waz here. *pawstamp* charge = charge + (powerdraw/1000) //This adds raw powerdraw to charge(Charge is in Ks as in 1 = 1000) // CHOMPEDIT End, Rykka waz here. *pawstamp* @@ -95,7 +95,7 @@ var/global/list/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawst var/drain_val = min(apc_drain_rate, cur_charge) A.cell.use(drain_val * CELLRATE) else if(!attached && anchored) - anchored = 0 + anchored = FALSE PN = null // CHOMPEDIT Start, Rykka waz here. *pawstamp* diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm index 156ad340bc..72e2532792 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm @@ -30,7 +30,7 @@ var/global/list/grub_machine_overlays = list() pass_flags = PASSTABLE can_pull_size = ITEMSIZE_TINY can_pull_mobs = MOB_PULL_NONE - density = 0 + density = FALSE //stop_when_pulled = 0 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5da7d82557..eb8e5acabe 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /mob/Destroy()//This makes sure that mobs withGLOB.clients/keys are not just deleted from the game. mob_list -= src dead_mob_list -= src @@ -1232,3 +1233,2474 @@ GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list) /mob/proc/grab_ghost(force) if(mind) return mind.grab_ghost(force = force) +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) +/mob/Destroy()//This makes sure that mobs withGLOB.clients/keys are not just deleted from the game. + mob_list -= src + dead_mob_list -= src + living_mob_list -= src + unset_machine() + qdel(hud_used) + clear_fullscreen() + if(client) + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + qdel(spell_master) + remove_screen_obj_references() + client.screen = list() + if(mind && mind.current == src) + spellremove(src) + ghostize() + QDEL_NULL(plane_holder) + ..() + return QDEL_HINT_HARDDEL_NOW + +/mob/proc/remove_screen_obj_references() + hands = null + pullin = null + purged = null + internals = null + i_select = null + m_select = null + healths = null + throw_icon = null + pain = null + item_use_icon = null + gun_move_icon = null + gun_setting_icon = null + spell_masters = null + zone_sel = null + +/mob/Initialize() + mob_list += src + if(stat == DEAD) + dead_mob_list += src + else + living_mob_list += src + lastarea = get_area(src) + set_focus(src) // VOREStation Add - Key Handling + hook_vr("mob_new",list(src)) //VOREStation Code + update_transform() // Some mobs may start bigger or smaller than normal. + return ..() + +/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) + + if(!client && !teleop) return + + if (type) + if((type & VISIBLE_MESSAGE) && (is_blind() || paralysis) )//Vision related + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & VISIBLE_MESSAGE) && (sdisabilities & BLIND)) + return + // Added voice muffling for Issue 41. + if(stat == UNCONSCIOUS || sleeping > 0) + to_chat(src, "... You can almost hear someone talking ...") + else + to_chat(src,msg) + if(teleop) + to_chat(teleop, create_text_tag("body", "BODY:", teleop) + "[msg]") + return + +// Show a message to all mobs and objects in sight of this one +// This would be for visible actions by the src mob +// message is the message output to anyone who can see e.g. "[src] does something!" +// self_message (optional) is what the src mob sees e.g. "You do something!" +// blind_message (optional) is what blind people will hear e.g. "You hear something!" +/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null, var/range = world.view, var/runemessage) + if(self_message) + if(LAZYLEN(exclude_mobs)) + exclude_mobs |= src + else + exclude_mobs = list(src) + src.show_message(self_message, 1, blind_message, 2) + if(isnull(runemessage)) + runemessage = -1 + . = ..(message, blind_message, exclude_mobs, range, runemessage) // Really not ideal that atom/visible_message has different arg numbering :( + +// Returns an amount of power drawn from the object (-1 if it's not viable). +// If drain_check is set it will not actually drain power, just return a value. +// If surge is set, it will destroy/damage the recipient and not return any power. +// Not sure where to define this, so it can sit here for the rest of time. +/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0) + return -1 + +// Show a message to all mobs and objects in earshot of this one +// This would be for audible actions by the src mob +// message is the message output to anyone who can hear. +// self_message (optional) is what the src mob hears. +// deaf_message (optional) is what deaf people will see. +// hearing_distance (optional) is the range, how many tiles away the message can be heard. +/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message, var/radio_message, var/runemessage) + + var/range = hearing_distance || world.view + var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE) + + var/list/hearing_mobs = hear["mobs"] + var/list/hearing_objs = hear["objs"] + + if(isnull(runemessage)) + runemessage = -1 // Symmetry with mob/audible_message, despite the fact this one doesn't call parent. Maybe it should! + + if(radio_message) + for(var/obj in hearing_objs) + var/obj/O = obj + O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null) + else + for(var/obj in hearing_objs) + var/obj/O = obj + O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) + + for(var/mob in hearing_mobs) + var/mob/M = mob + var/msg = message + if(self_message && M==src) + msg = self_message + M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) + if(runemessage != -1) + M.create_chat_message(src, "[runemessage || message]", FALSE, list("emote"), audible = FALSE) + +/mob/proc/findname(msg) + for(var/mob/M in mob_list) + if (M.real_name == text("[]", msg)) + return M + return 0 + +/mob/proc/Life() +// if(organStructure) +// organStructure.ProcessOrgans() + return + +#define UNBUCKLED 0 +#define PARTIALLY_BUCKLED 1 +#define FULLY_BUCKLED 2 +/mob/proc/buckled() + // Preliminary work for a future buckle rewrite, + // where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting) + if(!buckled) + return UNBUCKLED + return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED + +/mob/proc/is_blind() + return ((sdisabilities & BLIND) || blinded || incapacitated(INCAPACITATION_KNOCKOUT)) + +/mob/proc/is_deaf() + return ((sdisabilities & DEAF) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT)) + +/mob/proc/is_physically_disabled() + return incapacitated(INCAPACITATION_DISABLED) + +/mob/proc/cannot_stand() + return incapacitated(INCAPACITATION_KNOCKDOWN) + +/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) + if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned) + return 1 + + if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting)) + return 1 + + if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH))) + return 1 + + if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained()) + return 1 + + if((incapacitation_flags & (INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY))) + var/buckling = buckled() + if(buckling >= PARTIALLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_PARTIALLY)) + return 1 + if(buckling == FULLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_FULLY)) + return 1 + + return 0 + +#undef UNBUCKLED +#undef PARTIALLY_BUCKLED +#undef FULLY_BUCKLED + +/mob/proc/restrained() + return + +/mob/proc/reset_view(atom/A) + if (client) + if (istype(A, /atom/movable)) + client.perspective = EYE_PERSPECTIVE + client.eye = A + else + if (isturf(loc)) + client.eye = client.mob + client.perspective = MOB_PERSPECTIVE + else + client.perspective = EYE_PERSPECTIVE + client.eye = loc + return TRUE + +/mob/verb/pointed(atom/A as mob|obj|turf in view()) + set name = "Point To" + set category = "Object" + + if(!src || !isturf(src.loc) || !(A in view(src.loc))) + return 0 + if(istype(A, /obj/effect/decal/point)) + return 0 + + var/turf/tile = get_turf(A) + if (!tile) + return 0 + + var/turf/our_tile = get_turf(src) + var/obj/visual = new /obj/effect/decal/point(our_tile) + visual.invisibility = invisibility + visual.plane = ABOVE_PLANE + visual.layer = FLY_LAYER + + animate(visual, + pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, + pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, + time = 1.7, + easing = EASE_OUT) + + QDEL_IN(visual, 2 SECONDS) //Better qdel + + face_atom(A) + return 1 + + +/mob/proc/ret_grab(list/L, flag) + return + +/mob/verb/mode() + set name = "Activate Held Object" + set category = "Object" + set src = usr + + return + +/* +/mob/verb/dump_source() + + var/master = "
"
+	for(var/t in typesof(/area))
+		master += text("[]\n", t)
+		//Foreach goto(26)
+	src << browse(master)
+	return
+*/
+
+/mob/verb/memory()
+	set name = "Notes"
+	set category = "IC"
+	if(mind)
+		mind.show_memory(src)
+	else
+		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
+
+/mob/verb/add_memory(msg as message)
+	set name = "Add Note"
+	set category = "IC"
+
+	msg = sanitize(msg)
+
+	if(mind)
+		mind.store_memory(msg)
+	else
+		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
+
+/mob/proc/store_memory(msg as message, popup, sane = 1)
+	msg = copytext(msg, 1, MAX_MESSAGE_LEN)
+
+	if (sane)
+		msg = sanitize(msg)
+
+	if (length(memory) == 0)
+		memory += msg
+	else
+		memory += "
[msg]" + + if (popup) + memory() + +/mob/proc/update_flavor_text() + set src in usr + if(usr != src) + to_chat(usr, "No.") + var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb.","Flavor Text",html_decode(flavor_text)) as message|null, extra = 0) //VOREStation Edit: separating out OOC notes + + if(msg != null) + flavor_text = msg + +/mob/proc/warn_flavor_changed() + if(flavor_text && flavor_text != "") // don't spam people that don't use it! + to_chat(src, "

OOC Warning:

") + to_chat(src, "Your flavor text is likely out of date! Change") + +/mob/proc/print_flavor_text() + if (flavor_text && flavor_text != "") + var/msg = replacetext(flavor_text, "\n", " ") + if(length(msg) <= 40) + return "[msg]" + else + return "[copytext_preserve_html(msg, 1, 37)]... More..." + +/* +/mob/verb/help() + set name = "Help" + src << browse('html/help.html', "window=help") + return +*/ + +/mob/proc/set_respawn_timer(var/time) + // Try to figure out what time to use + + // Special cases, can never respawn + if(ticker?.mode?.deny_respawn) + time = -1 + else if(!config.abandon_allowed) + time = -1 + else if(!config.respawn) + time = -1 + + // Special case for observing before game start + else if(ticker?.current_state <= GAME_STATE_SETTING_UP) + time = 1 MINUTE + + // Wasn't given a time, use the config time + else if(!time) + time = config.respawn_time + + var/keytouse = ckey + // Try harder to find a key to use + if(!keytouse && key) + keytouse = ckey(key) + else if(!keytouse && mind?.key) + keytouse = ckey(mind.key) + + GLOB.respawn_timers[keytouse] = world.time + time + +/mob/observer/dead/set_respawn_timer() + if(config.antag_hud_restricted && has_enabled_antagHUD) + ..(-1) + else + return // Don't set it, no need + +/mob/verb/abandon_mob() + set name = "Return to Menu" + set category = "OOC" + + if(stat != DEAD || !ticker) + to_chat(usr, "You must be dead to use this!") + return + + // Final chance to abort "respawning" + if(mind && timeofdeath) // They had spawned before + var/choice = tgui_alert(usr, "Returning to the menu will prevent your character from being revived in-round. Are you sure?", "Confirmation", list("No, wait", "Yes, leave")) + if(choice == "No, wait") + return + + // Beyond this point, you're going to respawn + to_chat(usr, config.respawn_message) + + if(!client) + log_game("[usr.key] AM failed due to disconnect.") + return + client.screen.Cut() + client.screen += client.void + if(!client) + log_game("[usr.key] AM failed due to disconnect.") + return + + announce_ghost_joinleave(client, 0) + + var/mob/new_player/M = new /mob/new_player() + if(!client) + log_game("[usr.key] AM failed due to disconnect.") + qdel(M) + return + + M.key = key + if(M.mind) + M.mind.reset() + return + +/client/verb/changes() + set name = "Changelog" + set category = "OOC" + src << browse('html/changelog.html', "window=changes;size=675x650") + if(prefs.lastchangelog != changelog_hash) + prefs.lastchangelog = changelog_hash + SScharacter_setup.queue_preferences_save(prefs) + winset(src, "rpane.changelog", "background-color=none;font-style=;") + +/mob/verb/observe() + set name = "Observe" + set category = "OOC" + var/is_admin = 0 + + if(client.holder && (client.holder.rights & R_ADMIN|R_EVENT)) + is_admin = 1 + else if(stat != DEAD || istype(src, /mob/new_player)) + to_chat(usr, "You must be observing to use this!") + return + + if(is_admin && stat == DEAD) + is_admin = 0 + + var/list/targets = list() + + + targets += observe_list_format(nuke_disks) + targets += observe_list_format(all_singularities) + targets += getmobs() + targets += observe_list_format(sortAtom(mechas_list)) + targets += observe_list_format(SSshuttles.ships) + + client.perspective = EYE_PERSPECTIVE + + var/eye_name = null + + var/ok = "[is_admin ? "Admin Observe" : "Observe"]" + eye_name = tgui_input_list(usr, "Select something to [ok]:", "Select Target", targets) + + if (!eye_name) + return + + var/mob/mob_eye = targets[eye_name] + + if(client && mob_eye) + client.eye = mob_eye + if (is_admin) + client.adminobs = 1 + if(mob_eye == client.mob || client.eye == client.mob) + client.adminobs = 0 + +/mob/verb/cancel_camera() + set name = "Cancel Camera View" + set category = "OOC" + unset_machine() + reset_view(null) + +/mob/Topic(href, href_list) + if(href_list["mach_close"]) + var/t1 = text("window=[href_list["mach_close"]]") + unset_machine() + src << browse(null, t1) + + if(href_list["flavor_more"]) + usr << browse(text("[][]", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name)) + onclose(usr, "[name]") + if(href_list["flavor_change"]) + update_flavor_text() +// ..() + return + + +/mob/proc/pull_damage() + return 0 + +/mob/verb/stop_pulling() + + set name = "Stop Pulling" + set category = "IC" + + if(pulling) + if(ishuman(pulling)) + var/mob/living/carbon/human/H = pulling + visible_message(SPAN_WARNING("\The [src] lets go of \the [H]."), SPAN_NOTICE("You let go of \the [H]."), exclude_mobs = list(H)) + if(!H.stat) + to_chat(H, SPAN_WARNING("\The [src] lets go of you.")) + pulling.pulledby = null + pulling = null + if(pullin) + pullin.icon_state = "pull0" + +/mob/proc/start_pulling(var/atom/movable/AM) + + if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! + return + + if (AM.anchored) + to_chat(src, "It won't budge!") + return + + var/mob/M = AM + if(ismob(AM)) + + if(!can_pull_mobs || !can_pull_size) + to_chat(src, "They won't budge!") + return + + if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) + to_chat(src, "[M] is too large for you to move!") + return + + if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) + to_chat(src, "[M] is too heavy for you to move!") + return + + // If your size is larger than theirs and you have some + // kind of mob pull value AT ALL, you will be able to pull + // them, so don't bother checking that explicitly. + + if(M.grabbed_by.len) + // Only start pulling when nobody else has a grab on them + . = 1 + for(var/obj/item/weapon/grab/G in M.grabbed_by) + if(G.assailant != usr) + . = 0 + else + qdel(G) + if(!.) + to_chat(src, "Somebody has a grip on them!") + return + + if(!iscarbon(src)) + M.LAssailant = null + else + M.LAssailant = usr + + else if(isobj(AM)) + var/obj/I = AM + if(!can_pull_size || can_pull_size < I.w_class) + to_chat(src, "It won't budge!") + return + + if(pulling) + var/pulling_old = pulling + stop_pulling() + // Are we pulling the same thing twice? Just stop pulling. + if(pulling_old == AM) + return + + src.pulling = AM + AM.pulledby = src + + if(pullin) + pullin.icon_state = "pull1" + + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + if(H.lying) // If they're on the ground we're probably dragging their arms to move them + visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s arms."), SPAN_NOTICE("You lean down and grip \the [H]'s arms."), exclude_mobs = list(H)) + if(!H.stat) + to_chat(H, SPAN_WARNING("\The [src] leans down and grips your arms.")) + else //Otherwise we're probably just holding their arm to lead them somewhere + visible_message(SPAN_WARNING("\The [src] grips \the [H]'s arm."), SPAN_NOTICE("You grip \the [H]'s arm."), exclude_mobs = list(H)) + if(!H.stat) + to_chat(H, SPAN_WARNING("\The [src] grips your arm.")) + playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback + + if(H.pull_damage()) + to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.") + + //Attempted fix for people flying away through space when cuffed and dragged. + if(ismob(AM)) + var/mob/pulled = AM + pulled.inertia_dir = 0 + +/mob/proc/can_use_hands() + return + +/mob/proc/is_active() + return (0 >= usr.stat) + +/mob/proc/is_dead() + return stat == DEAD + +/mob/proc/is_mechanical() + if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI")) + return 1 + return istype(src, /mob/living/silicon) || get_species() == "Machine" + +/mob/proc/is_ready() + return client && !!mind + +/mob/proc/get_gender() + return gender + +/mob/proc/see(message) + if(!is_active()) + return 0 + to_chat(src,message) + return 1 + +/mob/proc/show_viewers(message) + for(var/mob/M in viewers()) + M.see(message) + +/mob/Stat() + ..() + . = (is_client_active(10 MINUTES)) + + if(.) + if(statpanel("Status")) + stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") + if(ticker && ticker.current_state != GAME_STATE_PREGAME) + stat("Station Time", stationtime2text()) + stat("Station Date", stationdate2text()) + stat("Round Duration", roundduration2text()) + + if(client.holder) + if(statpanel("Status")) + stat("Location:", "([x], [y], [z]) [loc]") + stat("CPU:","[world.cpu]") + stat("Instances:","[world.contents.len]") + stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") + stat("Keys Held", keys2text(client.move_keys_held | client.mod_keys_held)) + stat("Next Move ADD", dirs2text(client.next_move_dir_add)) + stat("Next Move SUB", dirs2text(client.next_move_dir_sub)) + + if(statpanel("MC")) + stat("Location:", "([x], [y], [z]) [loc]") + stat("CPU:","[world.cpu]") + stat("Instances:","[world.contents.len]") + stat("World Time:", world.time) + stat("Real time of day:", REALTIMEOFDAY) + stat(null) + if(GLOB) + GLOB.stat_entry() + else + stat("Globals:", "ERROR") + if(Master) + Master.stat_entry() + else + stat("Master Controller:", "ERROR") + if(Failsafe) + Failsafe.stat_entry() + else + stat("Failsafe Controller:", "ERROR") + if(Master) + stat(null) + for(var/datum/controller/subsystem/SS in Master.subsystems) + SS.stat_entry() + + if(statpanel("Tickets")) + GLOB.ahelp_tickets.stat_entry() + + + if(length(GLOB.sdql2_queries)) + if(statpanel("SDQL2")) + stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) + for(var/i in GLOB.sdql2_queries) + var/datum/SDQL2_query/Q = i + Q.generate_stat() + + if(listed_turf && client) + if(!TurfAdjacent(listed_turf)) + listed_turf = null + else + if(statpanel("Turf")) + stat(listed_turf) + for(var/atom/A in listed_turf) + if(!A.mouse_opacity) + continue + if(A.invisibility > see_invisible) + continue + if(is_type_in_list(A, shouldnt_see)) + continue + if(A.plane > plane) + continue + stat(A) + + +// facing verbs +/mob/proc/canface() +// if(!canmove) return 0 //VOREStation Edit. Redundant check that only affects conscious proning, actual inability to turn and shift around handled by actual inabilities. + if(stat) return 0 + if(anchored) return 0 + if(transforming) return 0 + return 1 + +// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet. +/mob/proc/can_stand_overridden() + return 0 + +//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. +/mob/proc/update_canmove() + return canmove + + +/mob/proc/facedir(var/ndir) + if(!canface() || (client && (client.moving || !checkMoveCooldown()))) + DEBUG_INPUT("Denying Facedir for [src] (moving=[client?.moving])") + return 0 + set_dir(ndir) + if(buckled && buckled.buckle_movable) + buckled.set_dir(ndir) + setMoveCooldown(movement_delay()) + return 1 + + +/mob/verb/eastface() + set hidden = 1 + return facedir(client.client_dir(EAST)) + + +/mob/verb/westface() + set hidden = 1 + return facedir(client.client_dir(WEST)) + + +/mob/verb/northface() + set hidden = 1 + return facedir(client.client_dir(NORTH)) + + +/mob/verb/southface() + set hidden = 1 + return facedir(client.client_dir(SOUTH)) + + +//This might need a rename but it should replace the can this mob use things check +/mob/proc/IsAdvancedToolUser() + return 0 + +/mob/proc/Stun(amount) + if(status_flags & CANSTUN) + facing_dir = null + stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" + if(status_flags & CANSTUN) + stunned = max(amount,0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/AdjustStunned(amount) + if(status_flags & CANSTUN) + stunned = max(stunned + amount,0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/Weaken(amount) + if(status_flags & CANWEAKEN) + facing_dir = null + weakened = max(max(weakened,amount),0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/SetWeakened(amount) + if(status_flags & CANWEAKEN) + weakened = max(amount,0) + update_canmove() //can you guess what this does yet? + return + +/mob/proc/AdjustWeakened(amount) + if(status_flags & CANWEAKEN) + weakened = max(weakened + amount,0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/Paralyse(amount) + if(status_flags & CANPARALYSE) + facing_dir = null + paralysis = max(max(paralysis,amount),0) + return + +/mob/proc/SetParalysis(amount) + if(status_flags & CANPARALYSE) + paralysis = max(amount,0) + return + +/mob/proc/AdjustParalysis(amount) + if(status_flags & CANPARALYSE) + paralysis = max(paralysis + amount,0) + return + +/mob/proc/Sleeping(amount) + facing_dir = null + sleeping = max(max(sleeping,amount),0) + return + +/mob/proc/SetSleeping(amount) + sleeping = max(amount,0) + return + +/mob/proc/AdjustSleeping(amount) + sleeping = max(sleeping + amount,0) + return + +/mob/proc/Confuse(amount) + confused = max(max(confused,amount),0) + return + +/mob/proc/SetConfused(amount) + confused = max(amount,0) + return + +/mob/proc/AdjustConfused(amount) + confused = max(confused + amount,0) + return + +/mob/proc/Blind(amount) + eye_blind = max(max(eye_blind,amount),0) + return + +/mob/proc/SetBlinded(amount) + eye_blind = max(amount,0) + return + +/mob/proc/AdjustBlinded(amount) + eye_blind = max(eye_blind + amount,0) + return + +/mob/proc/Resting(amount) + facing_dir = null + resting = max(max(resting,amount),0) + update_canmove() + return + +/mob/proc/SetResting(amount) + resting = max(amount,0) + update_canmove() + return + +/mob/proc/AdjustResting(amount) + resting = max(resting + amount,0) + update_canmove() + return + +/mob/proc/AdjustLosebreath(amount) + losebreath = CLAMP(losebreath + amount, 0, 25) + +/mob/proc/SetLosebreath(amount) + losebreath = CLAMP(amount, 0, 25) + +/mob/proc/get_species() + return "" + +/mob/proc/flash_weak_pain() + flick("weak_pain",pain) + +/mob/proc/get_visible_implants(var/class = 0) + var/list/visible_implants = list() + for(var/obj/item/O in embedded) + if(O.w_class > class) + visible_implants += O + return visible_implants + +/mob/proc/embedded_needs_process() + return (embedded.len > 0) + +/mob/proc/yank_out_object() + set category = "Object" + set name = "Yank out object" + set desc = "Remove an embedded item at the cost of bleeding and pain." + set src in view(1) + + if(!isliving(usr) || !usr.checkClickCooldown()) + return + usr.setClickCooldown(20) + + if(usr.stat == 1) + to_chat(usr, "You are unconcious and cannot do that!") + return + + if(usr.restrained()) + to_chat(usr, "You are restrained and cannot do that!") + return + + var/mob/S = src + var/mob/U = usr + var/list/valid_objects = list() + var/self = null + + if(S == U) + self = 1 // Removing object from yourself. + + valid_objects = get_visible_implants(0) + if(!valid_objects.len) + if(self) + to_chat(src, "You have nothing stuck in your body that is large enough to remove.") + else + to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.") + return + + var/obj/item/weapon/selection = tgui_input_list(usr, "What do you want to yank out?", "Embedded objects", valid_objects) + + if(self) + to_chat(src, "You attempt to get a good grip on [selection] in your body.") + else + to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.") + + if(!do_after(U, 30)) + return + if(!selection || !S || !U) + return + + if(self) + visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") + else + visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") + valid_objects = get_visible_implants(0) + if(valid_objects.len == 1) //Yanking out last object - removing verb. + src.verbs -= /mob/proc/yank_out_object + clear_alert("embeddedobject") + + if(ishuman(src)) + var/mob/living/carbon/human/H = src + var/obj/item/organ/external/affected + + for(var/obj/item/organ/external/organ in H.organs) //Grab the organ holding the implant. + for(var/obj/item/O in organ.implants) + if(O == selection) + affected = organ + + affected.implants -= selection + H.shock_stage+=20 + affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction") + + if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15)) + affected.wounds += I + H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50) + + if (ishuman(U)) + var/mob/living/carbon/human/human_user = U + human_user.bloody_hands(H) + + else if(issilicon(src)) + var/mob/living/silicon/robot/R = src + R.embedded -= selection + R.adjustBruteLoss(5) + R.adjustFireLoss(10) + + selection.forceMove(get_turf(src)) + U.put_in_hands(selection) + + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + if(!pinned.len) + anchored = 0 + return 1 + +//Check for brain worms in head. +/mob/proc/has_brain_worms() + + for(var/I in contents) + if(istype(I,/mob/living/simple_mob/animal/borer)) + return I + + return 0 + +/mob/proc/updateicon() + return + +// Please always use this proc, never just set the var directly. +/mob/proc/set_stat(var/new_stat) + . = (stat != new_stat) + stat = new_stat + +/mob/verb/face_direction() + + set name = "Face Direction" + set category = "IC" + set src = usr + + set_face_dir() + + if(!facing_dir) + to_chat(usr, "You are now not facing anything.") + else + to_chat(usr, "You are now facing [dir2text(facing_dir)].") + +/mob/proc/set_face_dir(var/newdir) + if(newdir == facing_dir) + facing_dir = null + else if(newdir) + set_dir(newdir) + facing_dir = newdir + else if(facing_dir) + facing_dir = null + else + set_dir(dir) + facing_dir = dir + +/mob/set_dir() + if(facing_dir) + if(!canface() || lying || buckled || restrained()) + facing_dir = null + else if(dir != facing_dir) + return ..(facing_dir) + else + return ..() + +/mob/verb/northfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(NORTH)) + +/mob/verb/southfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(SOUTH)) + +/mob/verb/eastfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(EAST)) + +/mob/verb/westfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(WEST)) + +// Begin VOREstation edit +/mob/verb/shiftnorth() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_y <= (default_pixel_y + 16)) + pixel_y++ + is_shifted = TRUE + +/mob/verb/shiftsouth() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_y >= (default_pixel_y - 16)) + pixel_y-- + is_shifted = TRUE + +/mob/verb/shiftwest() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_x >= (default_pixel_x - 16)) + pixel_x-- + is_shifted = TRUE + +/mob/verb/shifteast() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_x <= (default_pixel_x + 16)) + pixel_x++ + is_shifted = TRUE +// End VOREstation edit + +/mob/proc/adjustEarDamage() + return + +/mob/proc/setEarDamage() + return + +// Set client view distance (size of client's screen). Returns TRUE if anything changed. +/mob/proc/set_viewsize(var/new_view = world.view) + if (client && new_view != client.view) + client.view = new_view + return TRUE + return FALSE + +//Throwing stuff + +/mob/proc/toggle_throw_mode() + if (src.in_throw_mode) + throw_mode_off() + else + throw_mode_on() + +/mob/proc/throw_mode_off() + src.in_throw_mode = 0 + if(src.throw_icon) //in case we don't have the HUD and we use the hotkey + src.throw_icon.icon_state = "act_throw_off" + +/mob/proc/throw_mode_on() + src.in_throw_mode = 1 + if(src.throw_icon) + src.throw_icon.icon_state = "act_throw_on" + +/mob/proc/isSynthetic() + return 0 + +/mob/proc/is_muzzled() + return 0 + +//Exploitable Info Update + +/mob/proc/amend_exploitable(var/obj/item/I) + if(istype(I)) + exploit_addons |= I + var/exploitmsg = html_decode("\n" + "Has " + I.name + ".") + exploit_record += exploitmsg + +/client/proc/check_has_body_select() + return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) + +/client/verb/body_toggle_head() + set name = "body-toggle-head" + set hidden = 1 + toggle_zone_sel(list(BP_HEAD, O_EYES, O_MOUTH)) + +/client/verb/body_r_arm() + set name = "body-r-arm" + set hidden = 1 + toggle_zone_sel(list(BP_R_ARM,BP_R_HAND)) + +/client/verb/body_l_arm() + set name = "body-l-arm" + set hidden = 1 + toggle_zone_sel(list(BP_L_ARM,BP_L_HAND)) + +/client/verb/body_chest() + set name = "body-chest" + set hidden = 1 + toggle_zone_sel(list(BP_TORSO)) + +/client/verb/body_groin() + set name = "body-groin" + set hidden = 1 + toggle_zone_sel(list(BP_GROIN)) + +/client/verb/body_r_leg() + set name = "body-r-leg" + set hidden = 1 + toggle_zone_sel(list(BP_R_LEG,BP_R_FOOT)) + +/client/verb/body_l_leg() + set name = "body-l-leg" + set hidden = 1 + toggle_zone_sel(list(BP_L_LEG,BP_L_FOOT)) + +/client/proc/toggle_zone_sel(list/zones) + if(!check_has_body_select()) + return + var/obj/screen/zone_sel/selector = mob.zone_sel + selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) + +// This handles setting the client's color variable, which makes everything look a specific color. +// This proc is here so it can be called without needing to check if the client exists, or if the client relogs. +// This is for inheritence since /mob/living will serve most cases. If you need ghosts to use this you'll have to implement that yourself. +/mob/proc/update_client_color() + if(client && client.color) + animate(client, color = null, time = 10) + return + +/mob/proc/swap_hand() + return + +//Throwing stuff +/mob/proc/throw_item(atom/target) + return + +/mob/proc/will_show_tooltip() + if(alpha <= EFFECTIVE_INVIS) + return FALSE + return TRUE + +/mob/MouseEntered(location, control, params) + if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip()) + openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr)) + + ..() + +/mob/MouseDown() + closeToolTip(usr) //No reason not to, really + + ..() + +/mob/MouseExited() + closeToolTip(usr) //No reason not to, really + + ..() + +// Manages a global list of mobs with clients attached, indexed by z-level. +/mob/proc/update_client_z(new_z) // +1 to register, null to unregister. + if(registered_z != new_z) + if(registered_z) + GLOB.players_by_zlevel[registered_z] -= src + if(client) + if(new_z) + GLOB.players_by_zlevel[new_z] += src + registered_z = new_z + else + registered_z = null + +GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list) +/mob/living/update_client_z(new_z) + var/precall_reg_z = registered_z + . = ..() // will update registered_z if necessary + if(precall_reg_z != registered_z) // parent did work, let's do work too + if(precall_reg_z) + GLOB.living_players_by_zlevel[precall_reg_z] -= src + if(registered_z) + GLOB.living_players_by_zlevel[registered_z] += src + +/mob/onTransitZ(old_z, new_z) + ..() + update_client_z(new_z) + +/mob/cloak() + . = ..() + if(client && cloaked_selfimage) + client.images += cloaked_selfimage + +/mob/uncloak() + if(client && cloaked_selfimage) + client.images -= cloaked_selfimage + return ..() + +/mob/get_cloaked_selfimage() + var/icon/selficon = getCompoundIcon(src) + selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White + var/image/selfimage = image(selficon) + selfimage.color = "#0000FF" + selfimage.alpha = 100 + selfimage.layer = initial(layer) + selfimage.plane = initial(plane) + selfimage.loc = src + + return selfimage + +/mob/proc/GetAltName() + return "" + +/mob/proc/get_ghost(even_if_they_cant_reenter = 0) + if(mind) + return mind.get_ghost(even_if_they_cant_reenter) + +/mob/proc/grab_ghost(force) + if(mind) + return mind.grab_ghost(force = force) +======= +/mob/Destroy()//This makes sure that mobs withGLOB.clients/keys are not just deleted from the game. + mob_list -= src + dead_mob_list -= src + living_mob_list -= src + unset_machine() + qdel(hud_used) + clear_fullscreen() + if(client) + for(var/obj/screen/movable/spell_master/spell_master in spell_masters) + qdel(spell_master) + remove_screen_obj_references() + client.screen = list() + if(mind && mind.current == src) + spellremove(src) + ghostize() + QDEL_NULL(plane_holder) + ..() + return QDEL_HINT_HARDDEL_NOW + +/mob/proc/remove_screen_obj_references() + hands = null + pullin = null + purged = null + internals = null + i_select = null + m_select = null + healths = null + throw_icon = null + pain = null + item_use_icon = null + gun_move_icon = null + gun_setting_icon = null + spell_masters = null + zone_sel = null + +/mob/Initialize() + mob_list += src + if(stat == DEAD) + dead_mob_list += src + else + living_mob_list += src + lastarea = get_area(src) + set_focus(src) // VOREStation Add - Key Handling + hook_vr("mob_new",list(src)) //VOREStation Code + update_transform() // Some mobs may start bigger or smaller than normal. + return ..() + +/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) + + if(!client && !teleop) return + + if (type) + if((type & VISIBLE_MESSAGE) && (is_blind() || paralysis) )//Vision related + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related + if (!( alt )) + return + else + msg = alt + type = alt_type + if ((type & VISIBLE_MESSAGE) && (sdisabilities & BLIND)) + return + // Added voice muffling for Issue 41. + if(stat == UNCONSCIOUS || sleeping > 0) + to_chat(src, "... You can almost hear someone talking ...") + else + to_chat(src,msg) + if(teleop) + to_chat(teleop, create_text_tag("body", "BODY:", teleop) + "[msg]") + return + +// Show a message to all mobs and objects in sight of this one +// This would be for visible actions by the src mob +// message is the message output to anyone who can see e.g. "[src] does something!" +// self_message (optional) is what the src mob sees e.g. "You do something!" +// blind_message (optional) is what blind people will hear e.g. "You hear something!" +/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null, var/range = world.view, var/runemessage) + if(self_message) + if(LAZYLEN(exclude_mobs)) + exclude_mobs |= src + else + exclude_mobs = list(src) + src.show_message(self_message, 1, blind_message, 2) + if(isnull(runemessage)) + runemessage = -1 + . = ..(message, blind_message, exclude_mobs, range, runemessage) // Really not ideal that atom/visible_message has different arg numbering :( + +// Returns an amount of power drawn from the object (-1 if it's not viable). +// If drain_check is set it will not actually drain power, just return a value. +// If surge is set, it will destroy/damage the recipient and not return any power. +// Not sure where to define this, so it can sit here for the rest of time. +/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0) + return -1 + +// Show a message to all mobs and objects in earshot of this one +// This would be for audible actions by the src mob +// message is the message output to anyone who can hear. +// self_message (optional) is what the src mob hears. +// deaf_message (optional) is what deaf people will see. +// hearing_distance (optional) is the range, how many tiles away the message can be heard. +/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message, var/radio_message, var/runemessage) + + var/range = hearing_distance || world.view + var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE) + + var/list/hearing_mobs = hear["mobs"] + var/list/hearing_objs = hear["objs"] + + if(isnull(runemessage)) + runemessage = -1 // Symmetry with mob/audible_message, despite the fact this one doesn't call parent. Maybe it should! + + if(radio_message) + for(var/obj in hearing_objs) + var/obj/O = obj + O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null) + else + for(var/obj in hearing_objs) + var/obj/O = obj + O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) + + for(var/mob in hearing_mobs) + var/mob/M = mob + var/msg = message + if(self_message && M==src) + msg = self_message + M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) + if(runemessage != -1) + M.create_chat_message(src, "[runemessage || message]", FALSE, list("emote"), audible = FALSE) + +/mob/proc/findname(msg) + for(var/mob/M in mob_list) + if (M.real_name == text("[]", msg)) + return M + return 0 + +/mob/proc/Life() +// if(organStructure) +// organStructure.ProcessOrgans() + return + +#define UNBUCKLED 0 +#define PARTIALLY_BUCKLED 1 +#define FULLY_BUCKLED 2 +/mob/proc/buckled() + // Preliminary work for a future buckle rewrite, + // where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting) + if(!buckled) + return UNBUCKLED + return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED + +/mob/proc/is_blind() + return ((sdisabilities & BLIND) || blinded || incapacitated(INCAPACITATION_KNOCKOUT)) + +/mob/proc/is_deaf() + return ((sdisabilities & DEAF) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT)) + +/mob/proc/is_physically_disabled() + return incapacitated(INCAPACITATION_DISABLED) + +/mob/proc/cannot_stand() + return incapacitated(INCAPACITATION_KNOCKDOWN) + +/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) + if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned) + return 1 + + if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting)) + return 1 + + if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH))) + return 1 + + if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained()) + return 1 + + if((incapacitation_flags & (INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY))) + var/buckling = buckled() + if(buckling >= PARTIALLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_PARTIALLY)) + return 1 + if(buckling == FULLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_FULLY)) + return 1 + + return 0 + +#undef UNBUCKLED +#undef PARTIALLY_BUCKLED +#undef FULLY_BUCKLED + +/mob/proc/restrained() + return + +/mob/proc/reset_view(atom/A) + if (client) + if (istype(A, /atom/movable)) + client.perspective = EYE_PERSPECTIVE + client.eye = A + else + if (isturf(loc)) + client.eye = client.mob + client.perspective = MOB_PERSPECTIVE + else + client.perspective = EYE_PERSPECTIVE + client.eye = loc + return TRUE + +/mob/verb/pointed(atom/A as mob|obj|turf in view()) + set name = "Point To" + set category = "Object" + + if(!src || !isturf(src.loc) || !(A in view(src.loc))) + return 0 + if(istype(A, /obj/effect/decal/point)) + return 0 + + var/turf/tile = get_turf(A) + if (!tile) + return 0 + + var/turf/our_tile = get_turf(src) + var/obj/visual = new /obj/effect/decal/point(our_tile) + visual.invisibility = invisibility + visual.plane = ABOVE_PLANE + visual.layer = FLY_LAYER + + animate(visual, + pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, + pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, + time = 1.7, + easing = EASE_OUT) + + QDEL_IN(visual, 2 SECONDS) //Better qdel + + face_atom(A) + return 1 + + +/mob/proc/ret_grab(list/L, flag) + return + +/mob/verb/mode() + set name = "Activate Held Object" + set category = "Object" + set src = usr + + return + +/* +/mob/verb/dump_source() + + var/master = "
"
+	for(var/t in typesof(/area))
+		master += text("[]\n", t)
+		//Foreach goto(26)
+	src << browse(master)
+	return
+*/
+
+/mob/verb/memory()
+	set name = "Notes"
+	set category = "IC"
+	if(mind)
+		mind.show_memory(src)
+	else
+		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
+
+/mob/verb/add_memory(msg as message)
+	set name = "Add Note"
+	set category = "IC"
+
+	msg = sanitize(msg)
+
+	if(mind)
+		mind.store_memory(msg)
+	else
+		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
+
+/mob/proc/store_memory(msg as message, popup, sane = 1)
+	msg = copytext(msg, 1, MAX_MESSAGE_LEN)
+
+	if (sane)
+		msg = sanitize(msg)
+
+	if (length(memory) == 0)
+		memory += msg
+	else
+		memory += "
[msg]" + + if (popup) + memory() + +/mob/proc/update_flavor_text() + set src in usr + if(usr != src) + to_chat(usr, "No.") + var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb.","Flavor Text",html_decode(flavor_text)) as message|null, extra = 0) //VOREStation Edit: separating out OOC notes + + if(msg != null) + flavor_text = msg + +/mob/proc/warn_flavor_changed() + if(flavor_text && flavor_text != "") // don't spam people that don't use it! + to_chat(src, "

OOC Warning:

") + to_chat(src, "Your flavor text is likely out of date! Change") + +/mob/proc/print_flavor_text() + if (flavor_text && flavor_text != "") + var/msg = replacetext(flavor_text, "\n", " ") + if(length(msg) <= 40) + return "[msg]" + else + return "[copytext_preserve_html(msg, 1, 37)]... More..." + +/* +/mob/verb/help() + set name = "Help" + src << browse('html/help.html', "window=help") + return +*/ + +/mob/proc/set_respawn_timer(var/time) + // Try to figure out what time to use + + // Special cases, can never respawn + if(ticker?.mode?.deny_respawn) + time = -1 + else if(!config.abandon_allowed) + time = -1 + else if(!config.respawn) + time = -1 + + // Special case for observing before game start + else if(ticker?.current_state <= GAME_STATE_SETTING_UP) + time = 1 MINUTE + + // Wasn't given a time, use the config time + else if(!time) + time = config.respawn_time + + var/keytouse = ckey + // Try harder to find a key to use + if(!keytouse && key) + keytouse = ckey(key) + else if(!keytouse && mind?.key) + keytouse = ckey(mind.key) + + GLOB.respawn_timers[keytouse] = world.time + time + +/mob/observer/dead/set_respawn_timer() + if(config.antag_hud_restricted && has_enabled_antagHUD) + ..(-1) + else + return // Don't set it, no need + +/mob/verb/abandon_mob() + set name = "Return to Menu" + set category = "OOC" + + if(stat != DEAD || !ticker) + to_chat(usr, "You must be dead to use this!") + return + + // Final chance to abort "respawning" + if(mind && timeofdeath) // They had spawned before + var/choice = tgui_alert(usr, "Returning to the menu will prevent your character from being revived in-round. Are you sure?", "Confirmation", list("No, wait", "Yes, leave")) + if(choice == "No, wait") + return + + // Beyond this point, you're going to respawn + to_chat(usr, config.respawn_message) + + if(!client) + log_game("[usr.key] AM failed due to disconnect.") + return + client.screen.Cut() + client.screen += client.void + if(!client) + log_game("[usr.key] AM failed due to disconnect.") + return + + announce_ghost_joinleave(client, 0) + + var/mob/new_player/M = new /mob/new_player() + if(!client) + log_game("[usr.key] AM failed due to disconnect.") + qdel(M) + return + + M.key = key + if(M.mind) + M.mind.reset() + return + +/client/verb/changes() + set name = "Changelog" + set category = "OOC" + src << browse('html/changelog.html', "window=changes;size=675x650") + if(prefs.lastchangelog != changelog_hash) + prefs.lastchangelog = changelog_hash + SScharacter_setup.queue_preferences_save(prefs) + winset(src, "rpane.changelog", "background-color=none;font-style=;") + +/mob/verb/observe() + set name = "Observe" + set category = "OOC" + var/is_admin = 0 + + if(client.holder && (client.holder.rights & R_ADMIN|R_EVENT)) + is_admin = 1 + else if(stat != DEAD || istype(src, /mob/new_player)) + to_chat(usr, "You must be observing to use this!") + return + + if(is_admin && stat == DEAD) + is_admin = 0 + + var/list/targets = list() + + + targets += observe_list_format(nuke_disks) + targets += observe_list_format(all_singularities) + targets += getmobs() + targets += observe_list_format(sortAtom(mechas_list)) + targets += observe_list_format(SSshuttles.ships) + + client.perspective = EYE_PERSPECTIVE + + var/eye_name = null + + var/ok = "[is_admin ? "Admin Observe" : "Observe"]" + eye_name = tgui_input_list(usr, "Select something to [ok]:", "Select Target", targets) + + if (!eye_name) + return + + var/mob/mob_eye = targets[eye_name] + + if(client && mob_eye) + client.eye = mob_eye + if (is_admin) + client.adminobs = 1 + if(mob_eye == client.mob || client.eye == client.mob) + client.adminobs = 0 + +/mob/verb/cancel_camera() + set name = "Cancel Camera View" + set category = "OOC" + unset_machine() + reset_view(null) + +/mob/Topic(href, href_list) + if(href_list["mach_close"]) + var/t1 = text("window=[href_list["mach_close"]]") + unset_machine() + src << browse(null, t1) + + if(href_list["flavor_more"]) + usr << browse(text("[][]", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name)) + onclose(usr, "[name]") + if(href_list["flavor_change"]) + update_flavor_text() +// ..() + return + + +/mob/proc/pull_damage() + return 0 + +/mob/verb/stop_pulling() + + set name = "Stop Pulling" + set category = "IC" + + if(pulling) + if(ishuman(pulling)) + var/mob/living/carbon/human/H = pulling + visible_message(SPAN_WARNING("\The [src] lets go of \the [H]."), SPAN_NOTICE("You let go of \the [H]."), exclude_mobs = list(H)) + if(!H.stat) + to_chat(H, SPAN_WARNING("\The [src] lets go of you.")) + pulling.pulledby = null + pulling = null + if(pullin) + pullin.icon_state = "pull0" + +/mob/proc/start_pulling(var/atom/movable/AM) + + if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! + return + + if (AM.anchored) + to_chat(src, "It won't budge!") + return + + var/mob/M = AM + if(ismob(AM)) + + if(!can_pull_mobs || !can_pull_size) + to_chat(src, "They won't budge!") + return + + if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) + to_chat(src, "[M] is too large for you to move!") + return + + if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) + to_chat(src, "[M] is too heavy for you to move!") + return + + // If your size is larger than theirs and you have some + // kind of mob pull value AT ALL, you will be able to pull + // them, so don't bother checking that explicitly. + + if(M.grabbed_by.len) + // Only start pulling when nobody else has a grab on them + . = 1 + for(var/obj/item/weapon/grab/G in M.grabbed_by) + if(G.assailant != usr) + . = 0 + else + qdel(G) + if(!.) + to_chat(src, "Somebody has a grip on them!") + return + + if(!iscarbon(src)) + M.LAssailant = null + else + M.LAssailant = usr + + else if(isobj(AM)) + var/obj/I = AM + if(!can_pull_size || can_pull_size < I.w_class) + to_chat(src, "It won't budge!") + return + + if(pulling) + var/pulling_old = pulling + stop_pulling() + // Are we pulling the same thing twice? Just stop pulling. + if(pulling_old == AM) + return + + src.pulling = AM + AM.pulledby = src + + if(pullin) + pullin.icon_state = "pull1" + + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + if(H.lying) // If they're on the ground we're probably dragging their arms to move them + visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s arms."), SPAN_NOTICE("You lean down and grip \the [H]'s arms."), exclude_mobs = list(H)) + if(!H.stat) + to_chat(H, SPAN_WARNING("\The [src] leans down and grips your arms.")) + else //Otherwise we're probably just holding their arm to lead them somewhere + visible_message(SPAN_WARNING("\The [src] grips \the [H]'s arm."), SPAN_NOTICE("You grip \the [H]'s arm."), exclude_mobs = list(H)) + if(!H.stat) + to_chat(H, SPAN_WARNING("\The [src] grips your arm.")) + playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback + + if(H.pull_damage()) + to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.") + + //Attempted fix for people flying away through space when cuffed and dragged. + if(ismob(AM)) + var/mob/pulled = AM + pulled.inertia_dir = 0 + +/mob/proc/can_use_hands() + return + +/mob/proc/is_active() + return (0 >= usr.stat) + +/mob/proc/is_dead() + return stat == DEAD + +/mob/proc/is_mechanical() + if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI")) + return 1 + return istype(src, /mob/living/silicon) || get_species() == "Machine" + +/mob/proc/is_ready() + return client && !!mind + +/mob/proc/get_gender() + return gender + +/mob/proc/see(message) + if(!is_active()) + return 0 + to_chat(src,message) + return 1 + +/mob/proc/show_viewers(message) + for(var/mob/M in viewers()) + M.see(message) + +/mob/Stat() + ..() + . = (is_client_active(10 MINUTES)) + + if(.) + if(statpanel("Status")) + stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") + if(ticker && ticker.current_state != GAME_STATE_PREGAME) + stat("Station Time", stationtime2text()) + stat("Station Date", stationdate2text()) + stat("Round Duration", roundduration2text()) + + if(client.holder) + if(statpanel("Status")) + stat("Location:", "([x], [y], [z]) [loc]") + stat("CPU:","[world.cpu]") + stat("Instances:","[world.contents.len]") + stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") + stat("Keys Held", keys2text(client.move_keys_held | client.mod_keys_held)) + stat("Next Move ADD", dirs2text(client.next_move_dir_add)) + stat("Next Move SUB", dirs2text(client.next_move_dir_sub)) + + if(statpanel("MC")) + stat("Location:", "([x], [y], [z]) [loc]") + stat("CPU:","[world.cpu]") + stat("Instances:","[world.contents.len]") + stat("World Time:", world.time) + stat("Real time of day:", REALTIMEOFDAY) + stat(null) + if(GLOB) + GLOB.stat_entry() + else + stat("Globals:", "ERROR") + if(Master) + Master.stat_entry() + else + stat("Master Controller:", "ERROR") + if(Failsafe) + Failsafe.stat_entry() + else + stat("Failsafe Controller:", "ERROR") + if(Master) + stat(null) + for(var/datum/controller/subsystem/SS in Master.subsystems) + SS.stat_entry() + + if(statpanel("Tickets")) + GLOB.ahelp_tickets.stat_entry() + + + if(length(GLOB.sdql2_queries)) + if(statpanel("SDQL2")) + stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) + for(var/i in GLOB.sdql2_queries) + var/datum/SDQL2_query/Q = i + Q.generate_stat() + + if(listed_turf && client) + if(!TurfAdjacent(listed_turf)) + listed_turf = null + else + if(statpanel("Turf")) + stat(listed_turf) + for(var/atom/A in listed_turf) + if(!A.mouse_opacity) + continue + if(A.invisibility > see_invisible) + continue + if(is_type_in_list(A, shouldnt_see)) + continue + if(A.plane > plane) + continue + stat(A) + + +// facing verbs +/mob/proc/canface() +// if(!canmove) return 0 //VOREStation Edit. Redundant check that only affects conscious proning, actual inability to turn and shift around handled by actual inabilities. + if(stat) return 0 + if(anchored) return 0 + if(transforming) return 0 + return 1 + +// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet. +/mob/proc/can_stand_overridden() + return 0 + +//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. +/mob/proc/update_canmove() + return canmove + + +/mob/proc/facedir(var/ndir) + if(!canface() || (client && (client.moving || !checkMoveCooldown()))) + DEBUG_INPUT("Denying Facedir for [src] (moving=[client?.moving])") + return 0 + set_dir(ndir) + if(buckled && buckled.buckle_movable) + buckled.set_dir(ndir) + setMoveCooldown(movement_delay()) + return 1 + + +/mob/verb/eastface() + set hidden = 1 + return facedir(client.client_dir(EAST)) + + +/mob/verb/westface() + set hidden = 1 + return facedir(client.client_dir(WEST)) + + +/mob/verb/northface() + set hidden = 1 + return facedir(client.client_dir(NORTH)) + + +/mob/verb/southface() + set hidden = 1 + return facedir(client.client_dir(SOUTH)) + + +//This might need a rename but it should replace the can this mob use things check +/mob/proc/IsAdvancedToolUser() + return 0 + +/mob/proc/Stun(amount) + if(status_flags & CANSTUN) + facing_dir = null + stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" + if(status_flags & CANSTUN) + stunned = max(amount,0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/AdjustStunned(amount) + if(status_flags & CANSTUN) + stunned = max(stunned + amount,0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/Weaken(amount) + if(status_flags & CANWEAKEN) + facing_dir = null + weakened = max(max(weakened,amount),0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/SetWeakened(amount) + if(status_flags & CANWEAKEN) + weakened = max(amount,0) + update_canmove() //can you guess what this does yet? + return + +/mob/proc/AdjustWeakened(amount) + if(status_flags & CANWEAKEN) + weakened = max(weakened + amount,0) + update_canmove() //updates lying, canmove and icons + return + +/mob/proc/Paralyse(amount) + if(status_flags & CANPARALYSE) + facing_dir = null + paralysis = max(max(paralysis,amount),0) + return + +/mob/proc/SetParalysis(amount) + if(status_flags & CANPARALYSE) + paralysis = max(amount,0) + return + +/mob/proc/AdjustParalysis(amount) + if(status_flags & CANPARALYSE) + paralysis = max(paralysis + amount,0) + return + +/mob/proc/Sleeping(amount) + facing_dir = null + sleeping = max(max(sleeping,amount),0) + return + +/mob/proc/SetSleeping(amount) + sleeping = max(amount,0) + return + +/mob/proc/AdjustSleeping(amount) + sleeping = max(sleeping + amount,0) + return + +/mob/proc/Confuse(amount) + confused = max(max(confused,amount),0) + return + +/mob/proc/SetConfused(amount) + confused = max(amount,0) + return + +/mob/proc/AdjustConfused(amount) + confused = max(confused + amount,0) + return + +/mob/proc/Blind(amount) + eye_blind = max(max(eye_blind,amount),0) + return + +/mob/proc/SetBlinded(amount) + eye_blind = max(amount,0) + return + +/mob/proc/AdjustBlinded(amount) + eye_blind = max(eye_blind + amount,0) + return + +/mob/proc/Resting(amount) + facing_dir = null + resting = max(max(resting,amount),0) + update_canmove() + return + +/mob/proc/SetResting(amount) + resting = max(amount,0) + update_canmove() + return + +/mob/proc/AdjustResting(amount) + resting = max(resting + amount,0) + update_canmove() + return + +/mob/proc/AdjustLosebreath(amount) + losebreath = CLAMP(losebreath + amount, 0, 25) + +/mob/proc/SetLosebreath(amount) + losebreath = CLAMP(amount, 0, 25) + +/mob/proc/get_species() + return "" + +/mob/proc/flash_weak_pain() + flick("weak_pain",pain) + +/mob/proc/get_visible_implants(var/class = 0) + var/list/visible_implants = list() + for(var/obj/item/O in embedded) + if(O.w_class > class) + visible_implants += O + return visible_implants + +/mob/proc/embedded_needs_process() + return (embedded.len > 0) + +/mob/proc/yank_out_object() + set category = "Object" + set name = "Yank out object" + set desc = "Remove an embedded item at the cost of bleeding and pain." + set src in view(1) + + if(!isliving(usr) || !usr.checkClickCooldown()) + return + usr.setClickCooldown(20) + + if(usr.stat == 1) + to_chat(usr, "You are unconcious and cannot do that!") + return + + if(usr.restrained()) + to_chat(usr, "You are restrained and cannot do that!") + return + + var/mob/S = src + var/mob/U = usr + var/list/valid_objects = list() + var/self = null + + if(S == U) + self = 1 // Removing object from yourself. + + valid_objects = get_visible_implants(0) + if(!valid_objects.len) + if(self) + to_chat(src, "You have nothing stuck in your body that is large enough to remove.") + else + to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.") + return + + var/obj/item/weapon/selection = tgui_input_list(usr, "What do you want to yank out?", "Embedded objects", valid_objects) + + if(self) + to_chat(src, "You attempt to get a good grip on [selection] in your body.") + else + to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.") + + if(!do_after(U, 30)) + return + if(!selection || !S || !U) + return + + if(self) + visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") + else + visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") + valid_objects = get_visible_implants(0) + if(valid_objects.len == 1) //Yanking out last object - removing verb. + src.verbs -= /mob/proc/yank_out_object + clear_alert("embeddedobject") + + if(ishuman(src)) + var/mob/living/carbon/human/H = src + var/obj/item/organ/external/affected + + for(var/obj/item/organ/external/organ in H.organs) //Grab the organ holding the implant. + for(var/obj/item/O in organ.implants) + if(O == selection) + affected = organ + + affected.implants -= selection + H.shock_stage+=20 + affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction") + + if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15)) + affected.wounds += I + H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50) + + if (ishuman(U)) + var/mob/living/carbon/human/human_user = U + human_user.bloody_hands(H) + + else if(issilicon(src)) + var/mob/living/silicon/robot/R = src + R.embedded -= selection + R.adjustBruteLoss(5) + R.adjustFireLoss(10) + + selection.forceMove(get_turf(src)) + U.put_in_hands(selection) + + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + if(!pinned.len) + anchored = FALSE + return 1 + +//Check for brain worms in head. +/mob/proc/has_brain_worms() + + for(var/I in contents) + if(istype(I,/mob/living/simple_mob/animal/borer)) + return I + + return 0 + +/mob/proc/updateicon() + return + +// Please always use this proc, never just set the var directly. +/mob/proc/set_stat(var/new_stat) + . = (stat != new_stat) + stat = new_stat + +/mob/verb/face_direction() + + set name = "Face Direction" + set category = "IC" + set src = usr + + set_face_dir() + + if(!facing_dir) + to_chat(usr, "You are now not facing anything.") + else + to_chat(usr, "You are now facing [dir2text(facing_dir)].") + +/mob/proc/set_face_dir(var/newdir) + if(newdir == facing_dir) + facing_dir = null + else if(newdir) + set_dir(newdir) + facing_dir = newdir + else if(facing_dir) + facing_dir = null + else + set_dir(dir) + facing_dir = dir + +/mob/set_dir() + if(facing_dir) + if(!canface() || lying || buckled || restrained()) + facing_dir = null + else if(dir != facing_dir) + return ..(facing_dir) + else + return ..() + +/mob/verb/northfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(NORTH)) + +/mob/verb/southfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(SOUTH)) + +/mob/verb/eastfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(EAST)) + +/mob/verb/westfaceperm() + set hidden = 1 + set_face_dir(client.client_dir(WEST)) + +// Begin VOREstation edit +/mob/verb/shiftnorth() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_y <= (default_pixel_y + 16)) + pixel_y++ + is_shifted = TRUE + +/mob/verb/shiftsouth() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_y >= (default_pixel_y - 16)) + pixel_y-- + is_shifted = TRUE + +/mob/verb/shiftwest() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_x >= (default_pixel_x - 16)) + pixel_x-- + is_shifted = TRUE + +/mob/verb/shifteast() + set hidden = TRUE + if(!canface()) + return FALSE + if(pixel_x <= (default_pixel_x + 16)) + pixel_x++ + is_shifted = TRUE +// End VOREstation edit + +/mob/proc/adjustEarDamage() + return + +/mob/proc/setEarDamage() + return + +// Set client view distance (size of client's screen). Returns TRUE if anything changed. +/mob/proc/set_viewsize(var/new_view = world.view) + if (client && new_view != client.view) + client.view = new_view + return TRUE + return FALSE + +//Throwing stuff + +/mob/proc/toggle_throw_mode() + if (src.in_throw_mode) + throw_mode_off() + else + throw_mode_on() + +/mob/proc/throw_mode_off() + src.in_throw_mode = 0 + if(src.throw_icon) //in case we don't have the HUD and we use the hotkey + src.throw_icon.icon_state = "act_throw_off" + +/mob/proc/throw_mode_on() + src.in_throw_mode = 1 + if(src.throw_icon) + src.throw_icon.icon_state = "act_throw_on" + +/mob/proc/isSynthetic() + return 0 + +/mob/proc/is_muzzled() + return 0 + +//Exploitable Info Update + +/mob/proc/amend_exploitable(var/obj/item/I) + if(istype(I)) + exploit_addons |= I + var/exploitmsg = html_decode("\n" + "Has " + I.name + ".") + exploit_record += exploitmsg + +/client/proc/check_has_body_select() + return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) + +/client/verb/body_toggle_head() + set name = "body-toggle-head" + set hidden = 1 + toggle_zone_sel(list(BP_HEAD, O_EYES, O_MOUTH)) + +/client/verb/body_r_arm() + set name = "body-r-arm" + set hidden = 1 + toggle_zone_sel(list(BP_R_ARM,BP_R_HAND)) + +/client/verb/body_l_arm() + set name = "body-l-arm" + set hidden = 1 + toggle_zone_sel(list(BP_L_ARM,BP_L_HAND)) + +/client/verb/body_chest() + set name = "body-chest" + set hidden = 1 + toggle_zone_sel(list(BP_TORSO)) + +/client/verb/body_groin() + set name = "body-groin" + set hidden = 1 + toggle_zone_sel(list(BP_GROIN)) + +/client/verb/body_r_leg() + set name = "body-r-leg" + set hidden = 1 + toggle_zone_sel(list(BP_R_LEG,BP_R_FOOT)) + +/client/verb/body_l_leg() + set name = "body-l-leg" + set hidden = 1 + toggle_zone_sel(list(BP_L_LEG,BP_L_FOOT)) + +/client/proc/toggle_zone_sel(list/zones) + if(!check_has_body_select()) + return + var/obj/screen/zone_sel/selector = mob.zone_sel + selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) + +// This handles setting the client's color variable, which makes everything look a specific color. +// This proc is here so it can be called without needing to check if the client exists, or if the client relogs. +// This is for inheritence since /mob/living will serve most cases. If you need ghosts to use this you'll have to implement that yourself. +/mob/proc/update_client_color() + if(client && client.color) + animate(client, color = null, time = 10) + return + +/mob/proc/swap_hand() + return + +//Throwing stuff +/mob/proc/throw_item(atom/target) + return + +/mob/proc/will_show_tooltip() + if(alpha <= EFFECTIVE_INVIS) + return FALSE + return TRUE + +/mob/MouseEntered(location, control, params) + if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip()) + openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr)) + + ..() + +/mob/MouseDown() + closeToolTip(usr) //No reason not to, really + + ..() + +/mob/MouseExited() + closeToolTip(usr) //No reason not to, really + + ..() + +// Manages a global list of mobs with clients attached, indexed by z-level. +/mob/proc/update_client_z(new_z) // +1 to register, null to unregister. + if(registered_z != new_z) + if(registered_z) + GLOB.players_by_zlevel[registered_z] -= src + if(client) + if(new_z) + GLOB.players_by_zlevel[new_z] += src + registered_z = new_z + else + registered_z = null + +GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list) +/mob/living/update_client_z(new_z) + var/precall_reg_z = registered_z + . = ..() // will update registered_z if necessary + if(precall_reg_z != registered_z) // parent did work, let's do work too + if(precall_reg_z) + GLOB.living_players_by_zlevel[precall_reg_z] -= src + if(registered_z) + GLOB.living_players_by_zlevel[registered_z] += src + +/mob/onTransitZ(old_z, new_z) + ..() + update_client_z(new_z) + +/mob/cloak() + . = ..() + if(client && cloaked_selfimage) + client.images += cloaked_selfimage + +/mob/uncloak() + if(client && cloaked_selfimage) + client.images -= cloaked_selfimage + return ..() + +/mob/get_cloaked_selfimage() + var/icon/selficon = getCompoundIcon(src) + selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White + var/image/selfimage = image(selficon) + selfimage.color = "#0000FF" + selfimage.alpha = 100 + selfimage.layer = initial(layer) + selfimage.plane = initial(plane) + selfimage.loc = src + + return selfimage + +/mob/proc/GetAltName() + return "" + +/mob/proc/get_ghost(even_if_they_cant_reenter = 0) + if(mind) + return mind.get_ghost(even_if_they_cant_reenter) + +/mob/proc/grab_ghost(force) + if(mind) + return mind.grab_ghost(force = force) +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 4cdaa0dc95..dc1f1fc219 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -1,5 +1,5 @@ /mob - density = 1 + density = TRUE layer = MOB_LAYER plane = MOB_PLANE animate_movement = 2 @@ -90,7 +90,7 @@ var/canmove = 1 //Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects. var/incorporeal_move = 0 //0 is off, 1 is normal, 2 is for ninjas. - var/unacidable = 0 + var/unacidable = FALSE var/list/pinned = list() // List of things pinning this creature to walls (see living_defense.dm) var/list/embedded = list() // Embedded items, since simple mobs don't have organs. var/list/languages = list() // For speaking/listening. diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 74ef9043fb..81e0c91d4a 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -11,11 +11,11 @@ invisibility = 101 - density = 0 + density = FALSE stat = 2 canmove = 0 - anchored = 1 // don't get pushed around + anchored = TRUE // don't get pushed around var/created_for diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm index 9e39fe8e2e..8da5a9972f 100644 --- a/code/modules/modular_computers/NTNet/NTNet_relay.dm +++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm @@ -6,8 +6,8 @@ active_power_usage = 20000 //20kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. idle_power_usage = 100 icon_state = "ntnet" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE circuit = /obj/item/weapon/circuitboard/ntnet_relay var/datum/ntnet/NTNet = null // This is mostly for backwards reference and to allow varedit modifications from ingame. var/enabled = 1 // Set to 0 if the relay was turned off diff --git a/code/modules/modular_computers/computers/subtypes/dev_console.dm b/code/modules/modular_computers/computers/subtypes/dev_console.dm index d7dbeed75d..a259651da6 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_console.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_console.dm @@ -8,7 +8,7 @@ icon_state_menu = "menu" hardware_flag = PROGRAM_CONSOLE anchored = TRUE - density = 1 + density = TRUE layer = 2.9 base_idle_power_usage = 100 base_active_power_usage = 500 diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm index 33aaa2120c..f1ae59c80c 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm @@ -9,7 +9,7 @@ icon_state_screensaver = "standby" hardware_flag = PROGRAM_TELESCREEN anchored = TRUE - density = 0 + density = FALSE base_idle_power_usage = 75 base_active_power_usage = 300 max_hardware_size = 2 @@ -53,7 +53,7 @@ valid = TRUE if(valid) - anchored = 1 + anchored = TRUE screen_on = TRUE to_chat(user, "You secure \the [src].") return diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm index 4a3f14836c..b319b3e1df 100644 --- a/code/modules/multiz/hoist.dm +++ b/code/modules/multiz/hoist.dm @@ -21,8 +21,8 @@ icon = 'icons/obj/hoists.dmi' icon_state = "hoist_hook" var/obj/structure/hoist/source_hoist - can_buckle = 1 - anchored = 1 + can_buckle = TRUE + anchored = TRUE description_info = "Click and drag someone (or any object) to this to attach them to the clamp. If you are within reach, when you click and drag this to a turf adjacent to you, it will move the attached object there and release it." /obj/effect/hoist_hook/attack_hand(mob/living/user) @@ -91,8 +91,8 @@ icon = 'icons/obj/hoists.dmi' icon_state = "hoist_base" var/broken = 0 - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE name = "hoist" desc = "A manual hoist, uses a clamp and pulley to hoist things." var/atom/movable/hoistee diff --git a/code/modules/multiz/ladder_assembly_vr.dm b/code/modules/multiz/ladder_assembly_vr.dm index 4decbdd47d..d167ecc3ab 100644 --- a/code/modules/multiz/ladder_assembly_vr.dm +++ b/code/modules/multiz/ladder_assembly_vr.dm @@ -6,9 +6,9 @@ name = "ladder assembly" icon = 'icons/obj/structures.dmi' icon_state = "ladder00" - density = 0 + density = FALSE opacity = 0 - anchored = 0 + anchored = FALSE w_class = ITEMSIZE_HUGE var/state = 0 diff --git a/code/modules/multiz/ladders.dm b/code/modules/multiz/ladders.dm index 6b03f8f610..e45e61e482 100644 --- a/code/modules/multiz/ladders.dm +++ b/code/modules/multiz/ladders.dm @@ -3,9 +3,9 @@ desc = "A ladder. You can climb it up and down." icon_state = "ladder01" icon = 'icons/obj/structures/multiz.dmi' - density = 0 + density = FALSE opacity = 0 - anchored = 1 + anchored = TRUE var/allowed_directions = DOWN var/obj/structure/ladder/target_up diff --git a/code/modules/multiz/ladders_vr.dm b/code/modules/multiz/ladders_vr.dm index 8f96800a7e..6892e2ef12 100644 --- a/code/modules/multiz/ladders_vr.dm +++ b/code/modules/multiz/ladders_vr.dm @@ -3,10 +3,10 @@ desc = "Looks unstable. Best to test it with the clown." icon = 'icons/obj/stationobjs.dmi' icon_state = "portal" - density = 1 - unacidable = 1//Can't destroy energy portals. + density = TRUE + unacidable = TRUE//Can't destroy energy portals. var/failchance = 0 - anchored = 1 + anchored = TRUE var/obj/structure/portal_subtle/target /obj/structure/portal_subtle/Destroy() @@ -64,9 +64,9 @@ desc = "Looks unstable. Best to test it with the clown." icon = 'icons/obj/stationobjs_vr.dmi' icon_state = "portalgateway" - density = 1 - unacidable = 1//Can't destroy energy portals. - anchored = 1 + density = TRUE + unacidable = TRUE//Can't destroy energy portals. + anchored = TRUE /obj/structure/portal_gateway/Bumped(mob/M as mob|obj) if(istype(M,/mob) && !(istype(M,/mob/living))) diff --git a/code/modules/multiz/stairs.dm b/code/modules/multiz/stairs.dm index d2956ae194..ef92ffa18d 100644 --- a/code/modules/multiz/stairs.dm +++ b/code/modules/multiz/stairs.dm @@ -6,8 +6,8 @@ icon = 'icons/obj/structures/multiz.dmi' icon_state = "stair" opacity = 0 - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE layer = STAIRS_LAYER /obj/structure/stairs/Initialize() diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index ab2bcf6e3d..b3bbddfd4b 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -48,7 +48,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr icon = 'icons/turf/floors.dmi' icon_state = "invisible" desc = "Watch your step!" - density = 0 + density = FALSE plane = OPENSPACE_PLANE pathweight = 100000 //Seriously, don't try and path over this one numbnuts dynamic_lighting = 0 // Someday lets do proper lighting z-transfer. Until then we are leaving this off so it looks nicer. diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 836ab61233..9ba72f215e 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -13,7 +13,7 @@ var/global/list/starting_legal_nifsoft var/global/list/starting_illegal_nifsoft - density = 0 + density = FALSE opacity = 0 var/datum/entopic/entopic diff --git a/code/modules/nifsoft/software/10_combat.dm b/code/modules/nifsoft/software/10_combat.dm index d44b4bc3b2..ef70cf1854 100644 --- a/code/modules/nifsoft/software/10_combat.dm +++ b/code/modules/nifsoft/software/10_combat.dm @@ -56,8 +56,8 @@ var/global/datum/unarmed_attack/hardclaws/unarmed_hardclaws = new() damage = 15 attack_sound = "punch" miss_sound = 'sound/weapons/punchmiss.ogg' - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE sparring_variant_type = /datum/unarmed_attack/hardclaws /datum/nifsoft/hidelaser diff --git a/code/modules/overmap/overmap_shuttle.dm b/code/modules/overmap/overmap_shuttle.dm index 86ee893f1e..c827835fb9 100644 --- a/code/modules/overmap/overmap_shuttle.dm +++ b/code/modules/overmap/overmap_shuttle.dm @@ -126,8 +126,8 @@ desc = "The fuel input port of the shuttle. Holds one fuel tank. Use a crowbar to open and close it." icon = 'icons/turf/shuttle_parts.dmi' icon_state = "fuel_port" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/icon_closed = "fuel_port" var/icon_empty = "fuel_port_empty" var/icon_full = "fuel_port_full" diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 4b461a6a52..1b422c01d3 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -190,7 +190,7 @@ name = "generic sector" desc = "Sector with some stuff in it." icon_state = "sector" - anchored = 1 + anchored = TRUE // Because of the way these are spawned, they will potentially have their invisibility adjusted by the turfs they are mapped on // prior to being moved to the overmap. This blocks that. Use set_invisibility to adjust invisibility as needed instead. diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index 8de83e1a72..e0692314f9 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -278,7 +278,7 @@ GLOBAL_LIST_EMPTY(all_waypoints) icon_keyboard = null icon_screen = null circuit = /obj/item/weapon/circuitboard/nav/tele - density = 0 + density = FALSE /obj/machinery/computer/ship/navigation/telescreen/update_icon() if(stat & NOPOWER || stat & BROKEN) diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm index 86e4a91f52..3775af9a75 100644 --- a/code/modules/overmap/ships/computers/sensors.dm +++ b/code/modules/overmap/ships/computers/sensors.dm @@ -128,7 +128,7 @@ desc = "Long range gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements." //VOREStation Edit icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit icon_state = "sensors" - anchored = 1 + anchored = TRUE var/max_health = 200 var/health = 200 var/critical_heat = 50 // sparks and takes damage when active & above this heat diff --git a/code/modules/overmap/ships/engines/gas_thruster.dm b/code/modules/overmap/ships/engines/gas_thruster.dm index 40f2183dc7..773ed97a64 100644 --- a/code/modules/overmap/ships/engines/gas_thruster.dm +++ b/code/modules/overmap/ships/engines/gas_thruster.dm @@ -58,7 +58,7 @@ icon = 'icons/turf/shuttle_parts.dmi' icon_state = "nozzle" opacity = 1 - density = 1 + density = TRUE can_atmos_pass = ATMOS_PASS_NO connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL @@ -188,7 +188,7 @@ icon = 'icons/effects/effects.dmi' icon_state = "smoke" light_color = "#ed9200" - anchored = 1 + anchored = TRUE /obj/effect/engine_exhaust/New(var/turf/nloc, var/ndir, var/flame) ..(nloc) diff --git a/code/modules/overmap/turfs.dm b/code/modules/overmap/turfs.dm index 6647d16a4d..9d7a35c226 100644 --- a/code/modules/overmap/turfs.dm +++ b/code/modules/overmap/turfs.dm @@ -13,7 +13,7 @@ var/global/list/map_sectors = list() /turf/unsimulated/map/edge opacity = 1 - density = 1 + density = TRUE var/map_is_to_my var/turf/unsimulated/map/edge/wrap_buddy diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index c4fa72a9b5..396390a650 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -14,8 +14,8 @@ desc = "A large cabinet with drawers." icon = 'icons/obj/bureaucracy.dmi' icon_state = "filingcabinet" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE /obj/structure/filingcabinet/chestdrawer name = "chest drawer" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e8b3c52d82..0f0ea8e2ef 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -665,7 +665,7 @@ /obj/item/weapon/paper/flag icon_state = "flag_neutral" item_state = "paper" - anchored = 1.0 + anchored = TRUE /obj/item/weapon/paper/jobs name = "Job Information" diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 223608f0aa..19a0994699 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -7,8 +7,8 @@ icon = 'icons/obj/papershredder.dmi' icon_state = "shredder-off" var/shred_anim = "shredder-shredding" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 200 diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 8cb60d4405..5f5a088b5b 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -150,8 +150,8 @@ embed_chance = active_embed_chance force = active_force throwforce = active_throwforce - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE w_class = active_w_class playsound(src, 'sound/weapons/saberon.ogg', 15, 1) damtype = SEARING diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index e420187151..74cceb11f6 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/library.dmi' icon_state = "bigscanner" var/insert_anim = "bigscanner1" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 30 active_power_usage = 200 diff --git a/code/modules/persistence/filth.dm b/code/modules/persistence/filth.dm index 059f1b61fe..55590c805c 100644 --- a/code/modules/persistence/filth.dm +++ b/code/modules/persistence/filth.dm @@ -5,7 +5,7 @@ icon_state = "mfloor1" random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") color = "#464f33" - anchored = 1 + anchored = TRUE persistent = TRUE /obj/effect/decal/cleanable/filth/Initialize() diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm index 999a82ea90..fefc73c199 100644 --- a/code/modules/persistence/graffiti.dm +++ b/code/modules/persistence/graffiti.dm @@ -9,7 +9,7 @@ blend_mode = BLEND_MULTIPLY color = "#000000" alpha = 120 - anchored = 1 + anchored = TRUE var/message var/graffiti_age = 0 diff --git a/code/modules/persistence/noticeboard.dm b/code/modules/persistence/noticeboard.dm index ced0b3128b..c187225fa1 100644 --- a/code/modules/persistence/noticeboard.dm +++ b/code/modules/persistence/noticeboard.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "nboard00" layer = ABOVE_WINDOW_LAYER - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/list/notices var/base_icon_state = "nboard0" var/const/max_notices = 5 diff --git a/code/modules/power/antimatter/containment_jar.dm b/code/modules/power/antimatter/containment_jar.dm index dd0e503bd4..f2da66eea0 100644 --- a/code/modules/power/antimatter/containment_jar.dm +++ b/code/modules/power/antimatter/containment_jar.dm @@ -3,8 +3,8 @@ desc = "Holds antimatter." icon = 'icons/obj/machines/antimatter.dmi' icon_state = "jar" - density = 0 - anchored = 0 + density = FALSE + anchored = FALSE force = 8 throwforce = 10 throw_speed = 1 diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 93c716b426..7a38c57010 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -3,8 +3,8 @@ desc = "This device injects antimatter into connected shielding units, the more antimatter injected the more power produced. Wrench the device to set it up." icon = 'icons/obj/machines/antimatter.dmi' icon_state = "control" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 100 active_power_usage = 1000 diff --git a/code/modules/power/antimatter/engine.dm b/code/modules/power/antimatter/engine.dm index 13f230bbb6..613c866020 100644 --- a/code/modules/power/antimatter/engine.dm +++ b/code/modules/power/antimatter/engine.dm @@ -1,7 +1,7 @@ /obj/machinery/power/am_engine icon = 'icons/am_engine.dmi' - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE flags = ON_BORDER /obj/machinery/power/am_engine/bits diff --git a/code/modules/power/antimatter/fuel.dm b/code/modules/power/antimatter/fuel.dm index e54f0eb0d7..bd78186a96 100644 --- a/code/modules/power/antimatter/fuel.dm +++ b/code/modules/power/antimatter/fuel.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/items.dmi' icon_state = "rcdammo" opacity = 0 - density = 0 - anchored = 0.0 + density = FALSE + anchored = FALSE var/fuel = 0 var/s_time = 1.0 var/content = null diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 8dfd12a296..3dc9e97af3 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -13,8 +13,8 @@ icon = 'icons/obj/machines/antimatter.dmi' icon_state = "shield" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE dir = 1 use_power = USE_POWER_OFF //Living things generally dont use power idle_power_usage = 0 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 0d16617feb..f6f02bb277 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -81,7 +81,7 @@ GLOBAL_LIST_EMPTY(apcs) icon = 'icons/obj/power.dmi' icon_state = "apc0" layer = ABOVE_WINDOW_LAYER - anchored = 1 + anchored = TRUE use_power = USE_POWER_OFF clicksound = "switch" req_access = list(access_engine_equip) diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 5ebf482679..669600bab7 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -12,8 +12,8 @@ //directwired = 0 var/icon_state_on = "bbox_on" var/icon_state_off = "bbox_off" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/breakerbox var/on = 0 var/busy = 0 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index cdc7f4343a..b71ee80b28 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -45,7 +45,7 @@ var/list/possible_cable_coil_colours = list( /obj/structure/cable level = 1 - anchored =1 + anchored =TRUE var/datum/powernet/powernet name = "power cable" desc = "A flexible superconducting cable for heavy-duty power transfer." diff --git a/code/modules/power/cable_ender.dm b/code/modules/power/cable_ender.dm index 20ca1fdd05..5a581e37be 100644 --- a/code/modules/power/cable_ender.dm +++ b/code/modules/power/cable_ender.dm @@ -11,7 +11,7 @@ plane = PLATING_PLANE layer = PIPES_LAYER - 0.05 //Just below pipes color = null - unacidable = 1 + unacidable = TRUE var/id = null /obj/structure/cable/ender/get_connections(var/powernetless_only = 0) diff --git a/code/modules/power/debug_items.dm b/code/modules/power/debug_items.dm index c7ca43705b..0fe6e9fb07 100644 --- a/code/modules/power/debug_items.dm +++ b/code/modules/power/debug_items.dm @@ -1,8 +1,8 @@ /obj/machinery/power/debug_items/ icon = 'icons/obj/power.dmi' icon_state = "tracker" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/show_extended_information = 1 // Set to 0 to disable extra information on examining (for example, when used on admin events) /obj/machinery/power/debug_items/examine(mob/user) diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index aba9087b75..0fb5626a57 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -12,11 +12,11 @@ GLOBAL_LIST_EMPTY(fusion_cores) desc = "An enormous solenoid for generating extremely high power electromagnetic fields. It includes a kinetic energy harvester." icon = 'icons/obj/machines/power/fusion.dmi' icon_state = "core0" - density = 1 + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 50 active_power_usage = 500 //multiplied by field strength - anchored = 0 + anchored = FALSE circuit = /obj/item/weapon/circuitboard/fusion_core @@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(fusion_cores) var/reactant_dump = FALSE // Does the tokomak actively try to syphon materials? /obj/machinery/power/fusion_core/mapped - anchored = 1 + anchored = TRUE /obj/machinery/power/fusion_core/Initialize() . = ..() diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm index fd691c65cb..9720d17245 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm @@ -4,8 +4,8 @@ name = "fuel compressor" icon = 'icons/obj/machines/power/fusion.dmi' icon_state = "fuel_compressor1" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/fusion_fuel_compressor diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 5e0122ce04..c928399c29 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -4,8 +4,8 @@ GLOBAL_LIST_EMPTY(fuel_injectors) name = "fuel injector" icon = 'icons/obj/machines/power/fusion.dmi' icon_state = "injector0" - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE req_access = list(access_engine) use_power = USE_POWER_IDLE idle_power_usage = 10 @@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(fuel_injectors) return ..() /obj/machinery/fusion_fuel_injector/mapped - anchored = 1 + anchored = TRUE /obj/machinery/fusion_fuel_injector/process() if(injecting) diff --git a/code/modules/power/fusion/fusion_particle_catcher.dm b/code/modules/power/fusion/fusion_particle_catcher.dm index 78e4b8b950..d70f10a255 100644 --- a/code/modules/power/fusion/fusion_particle_catcher.dm +++ b/code/modules/power/fusion/fusion_particle_catcher.dm @@ -1,7 +1,7 @@ /obj/effect/fusion_particle_catcher icon = 'icons/effects/effects.dmi' - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE invisibility = 101 var/obj/effect/fusion_em_field/parent var/mysize = 0 @@ -26,10 +26,10 @@ /obj/effect/fusion_particle_catcher/proc/UpdateSize() if(parent.size >= mysize) - density = 1 + density = TRUE name = "collector [mysize] ON" else - density = 0 + density = FALSE name = "collector [mysize] OFF" /obj/effect/fusion_particle_catcher/bullet_act(var/obj/item/projectile/Proj) diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm index 4740e0a118..8f7e1f9f52 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron.dm @@ -18,7 +18,7 @@ GLOBAL_LIST_EMPTY(gyrotrons) /obj/machinery/power/emitter/gyrotron/anchored - anchored = 1 + anchored = TRUE state = 2 /obj/machinery/power/emitter/gyrotron/Initialize() diff --git a/code/modules/power/fusion/magpower.dm b/code/modules/power/fusion/magpower.dm index 9ebea0e4fc..81ab2e5ce5 100644 --- a/code/modules/power/fusion/magpower.dm +++ b/code/modules/power/fusion/magpower.dm @@ -6,7 +6,7 @@ desc = "A device for extracting power from high-energy plasma in toroidal fields." icon = 'icons/obj/machines/power/fusion.dmi' icon_state = "mag_trap0" - anchored = 1 + anchored = TRUE var/list/things_in_range = list()//what is in a radius of us? var/list/fields_in_range = list()//What EM fields are in that radius? var/list/active_field = list()//Our active field. diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index c6ad30ccc5..590a681cec 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -4,8 +4,8 @@ GLOBAL_LIST_EMPTY(all_turbines) name = "thermoelectric generator" desc = "It's a high efficiency thermoelectric generator." icon_state = "teg-unassembled" - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE use_power = USE_POWER_IDLE idle_power_usage = 100 //Watts, I hope. Just enough to do the computer and display things. diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index d71da42e9e..abad3f3431 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -4,8 +4,8 @@ name = "gravity generator control" desc = "A computer to control a local gravity generator. Qualified personnel only." icon_state = "airtunnel0e" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/obj/machinery/gravity_generator = null @@ -14,8 +14,8 @@ desc = "A device which produces a gravaton field when set up." icon = 'icons/obj/singularity.dmi' icon_state = "TheSingGen" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 200 active_power_usage = 1000 diff --git a/code/modules/power/grid_checker.dm b/code/modules/power/grid_checker.dm index 53766098f0..1409be9fef 100644 --- a/code/modules/power/grid_checker.dm +++ b/code/modules/power/grid_checker.dm @@ -4,8 +4,8 @@ than the alternative." icon_state = "gridchecker_on" circuit = /obj/item/weapon/circuitboard/grid_checker - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/power_failing = FALSE // Turns to TRUE when the grid check event is fired by the Game Master, or perhaps a cheeky antag. // Wire stuff below. var/datum/wires/grid_checker/wires diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 44e1bc569a..2a79ddb08a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -24,7 +24,7 @@ var/global/list/light_type_cache = list() desc = "A light fixture under construction." icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-stage1" - anchored = 1 + anchored = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER var/stage = 1 @@ -166,7 +166,7 @@ var/global/list/light_type_cache = list() desc = "A small light fixture under construction." icon = 'icons/obj/lighting.dmi' icon_state = "bulb-construct-stage1" - anchored = 1 + anchored = TRUE stage = 1 fixture_type = /obj/machinery/light/small sheets_refunded = 1 @@ -185,7 +185,7 @@ var/global/list/light_type_cache = list() desc = "A floor light fixture under construction." icon = 'icons/obj/lighting.dmi' icon_state = "flamp-construct-stage1" - anchored = 0 + anchored = FALSE plane = OBJ_PLANE layer = OBJ_LAYER stage = 1 @@ -208,7 +208,7 @@ var/global/list/light_type_cache = list() var/base_state = "tube" // base description and icon_state icon_state = "tube1" desc = "A lighting fixture." - anchored = 1 + anchored = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER use_power = USE_POWER_ACTIVE @@ -1060,7 +1060,7 @@ var/global/list/light_type_cache = list() src.visible_message("[name] shatters."," You hear a small glass object shatter.") status = LIGHT_BROKEN force = 5 - sharp = 1 + sharp = TRUE playsound(src, 'sound/effects/Glasshit.ogg', 75, 1) update_icon() diff --git a/code/modules/power/lighting_vr.dm b/code/modules/power/lighting_vr.dm index 4c13300a73..b7f0fb320c 100644 --- a/code/modules/power/lighting_vr.dm +++ b/code/modules/power/lighting_vr.dm @@ -70,7 +70,7 @@ icon = 'icons/obj/lighting_vr.dmi' icon_state = "floortube-construct-stage1" stage = 1 - anchored = 0 + anchored = FALSE fixture_type = /obj/machinery/light/floortube sheets_refunded = 2 @@ -101,8 +101,8 @@ base_state = "big_flamp" desc = "A set of tube lights on a raised, solid fixture" shows_alerts = FALSE - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER construct_type = /obj/machinery/light_construct/bigfloorlamp @@ -116,7 +116,7 @@ icon = 'icons/obj/lighting32x64.dmi' icon_state = "big_flamp-construct-stage1" stage = 1 - anchored = 0 + anchored = FALSE fixture_type = /obj/machinery/light/bigfloorlamp sheets_refunded = 3 diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index dce52720b4..abf536f651 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -4,8 +4,8 @@ desc = "A portable generator for emergency backup power" icon = 'icons/obj/power_vr.dmi' //VOREStation Edit icon_state = "portgen0" //VOREStation Edit - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE use_power = USE_POWER_OFF interact_offline = TRUE diff --git a/code/modules/power/port_gen_vr.dm b/code/modules/power/port_gen_vr.dm index 5964adc297..b2c8deb469 100644 --- a/code/modules/power/port_gen_vr.dm +++ b/code/modules/power/port_gen_vr.dm @@ -5,7 +5,7 @@ icon_state = "potato" time_per_sheet = 1152 //same power output, but a 50 sheet stack will last 4 hours at max safe power power_gen = 50000 //watts - anchored = 1 + anchored = TRUE // Circuits for the RTGs below /obj/item/weapon/circuitboard/machine/rtg diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index bbf3cb7c75..dc09a9fb0c 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -9,7 +9,7 @@ /obj/machinery/power name = null icon = 'icons/obj/power.dmi' - anchored = 1.0 + anchored = TRUE var/datum/powernet/powernet = null use_power = USE_POWER_OFF idle_power_usage = 0 diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index 6f1b53db05..6dd58ea102 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -10,8 +10,8 @@ /obj/machinery/power/sensor name = "Powernet Sensor" desc = "Small machine which transmits data about specific powernet" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE layer = ABOVE_UTILITY icon = 'icons/obj/objects.dmi' icon_state = "floor_beacon" // If anyone wants to make better sprite, feel free to do so without asking me. diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm index 4e6198f410..277b175102 100644 --- a/code/modules/power/sensors/sensor_monitoring.dm +++ b/code/modules/power/sensors/sensor_monitoring.dm @@ -11,8 +11,8 @@ light_color = "#ffcc33" //computer stuff - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/powermonitor var/alerting = 0 use_power = USE_POWER_IDLE diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index c036cf0368..86a4d00edb 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -6,8 +6,8 @@ var/global/list/rad_collectors = list() desc = "A device which uses Hawking Radiation and phoron to produce power." icon = 'icons/obj/singularity.dmi' icon_state = "ca" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE req_access = list(access_engine_equip) // use_power = 0 var/obj/item/weapon/tank/phoron/P = null diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 50655315ad..c47352e09d 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -5,9 +5,9 @@ desc = "An energy field." icon = 'icons/obj/singularity.dmi' icon_state = "Contain_F" - anchored = 1 - density = 0 - unacidable = 1 + anchored = TRUE + density = FALSE + unacidable = TRUE use_power = USE_POWER_OFF light_range = 4 var/obj/machinery/field_generator/FG1 = null diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 903ac6100f..02475594ab 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -5,8 +5,8 @@ desc = "It is a heavy duty industrial laser." icon = 'icons/obj/singularity.dmi' icon_state = "emitter" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE req_access = list(access_engine_equip) var/id = null diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index f6c7407b4e..9afad48445 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -18,8 +18,8 @@ field_generator power level display desc = "A large thermal battery that projects a high amount of energy when powered." icon = 'icons/obj/machines/field_generator.dmi' icon_state = "Field_Gen" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE use_power = USE_POWER_OFF var/const/num_power_levels = 6 // Total number of power level icon has var/Varedit_start = 0 @@ -67,7 +67,7 @@ field_generator power level display active = 1 state = 2 power = field_generator_max_power - anchored = 1 + anchored = TRUE warming_up = 3 start_fields() update_icon() diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 5c9031a831..c29e200e86 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -4,8 +4,8 @@ desc = "An Odd Device which produces a Gravitational Singularity when set up." icon = 'icons/obj/singularity.dmi' icon_state = "TheSingGen" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE use_power = USE_POWER_OFF var/energy = 0 var/creation_type = /obj/singularity diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index e54b46c7f0..7f30e02966 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -5,8 +5,8 @@ desc = "Small things moving very fast." icon = 'icons/obj/machines/particle_accelerator2.dmi' icon_state = "particle1"//Need a new icon for this - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/movement_range = 10 var/energy = 10 //energy in eV var/mega_energy = 0 //energy in MeV diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 6d7108fbd6..8d96045cf3 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -63,8 +63,8 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin desc = "Part of a Particle Accelerator." icon = 'icons/obj/machines/particle_accelerator2.dmi' icon_state = "none" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE var/obj/machinery/particle_accelerator/control_box/master = null var/construction_state = 0 var/reference = null @@ -252,8 +252,8 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin desc = "Part of a Particle Accelerator." icon = 'icons/obj/machines/particle_accelerator2.dmi' icon_state = "none" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE use_power = USE_POWER_OFF idle_power_usage = 0 active_power_usage = 0 diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 6beda2db15..e4d3254fda 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -6,8 +6,8 @@ icon = 'icons/obj/machines/particle_accelerator_vr.dmi' //VOREStation Edit icon_state = "control_box" reference = "control_box" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE use_power = USE_POWER_OFF idle_power_usage = 500 active_power_usage = 70000 //70 kW per unit of strength diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm index 44e5c5d4fc..938f9b6934 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm @@ -7,8 +7,8 @@ desc = "A strange device used to create exotic matter." icon = 'icons/obj/machines/particle_smasher.dmi' icon_state = "smasher" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE use_power = USE_POWER_OFF var/successful_craft = FALSE // Are we waiting to be emptied? diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 61fae18c42..3225030581 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -7,11 +7,11 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) desc = "A gravitational singularity." icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE plane = ABOVE_PLANE light_range = 6 - unacidable = 1 //Don't comment this out. + unacidable = TRUE //Don't comment this out. var/current_size = 1 var/allowed_size = 1 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index d0dc9a21e0..3ddbb303e8 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -10,8 +10,8 @@ GLOBAL_LIST_EMPTY(smeses) name = "power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." icon_state = "smes" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_OFF circuit = /obj/item/weapon/circuitboard/smes clicksound = "switch" diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 52ed673196..d15b9153ac 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -11,8 +11,8 @@ GLOBAL_LIST_EMPTY(solars_list) desc = "A solar electrical generator." icon = 'icons/obj/power.dmi' icon_state = "sp_base" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_OFF idle_power_usage = 0 active_power_usage = 0 @@ -202,7 +202,7 @@ GLOBAL_LIST_EMPTY(solars_list) icon_state = "sp_base" item_state = "camera" w_class = ITEMSIZE_LARGE // Pretty big! - anchored = 0 + anchored = FALSE var/tracker = 0 /obj/item/solar_assembly/attack_hand(var/mob/user) @@ -214,13 +214,13 @@ GLOBAL_LIST_EMPTY(solars_list) return 0 if(!anchored) if(W.is_wrench()) - anchored = 1 + anchored = TRUE user.visible_message("[user] wrenches the solar assembly into place.") playsound(src, W.usesound, 75, 1) return 1 else if(W.is_wrench()) - anchored = 0 + anchored = FALSE user.visible_message("[user] unwrenches the solar assembly from it's place.") playsound(src, W.usesound, 75, 1) return 1 @@ -264,8 +264,8 @@ GLOBAL_LIST_EMPTY(solars_list) desc = "A controller for solar panel arrays." icon = 'icons/obj/computer.dmi' icon_state = "solar" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_IDLE idle_power_usage = 250 var/id = 0 diff --git a/code/modules/power/supermatter/setup_supermatter.dm b/code/modules/power/supermatter/setup_supermatter.dm index bb8561cfbf..22fc9547b5 100644 --- a/code/modules/power/supermatter/setup_supermatter.dm +++ b/code/modules/power/supermatter/setup_supermatter.dm @@ -103,8 +103,8 @@ name = "Engine Setup Marker" desc = "You shouldn't see this." invisibility = 101 - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE icon = 'icons/mob/screen1.dmi' icon_state = "x3" diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index b50da0162d..ace5a7b58c 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -54,8 +54,8 @@ icon_state = "darkmatter" plane = MOB_PLANE // So people can walk behind the top part layer = ABOVE_MOB_LAYER // So people can walk behind the top part - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE light_range = 4 var/gasefficency = 0.25 @@ -170,7 +170,7 @@ message_admins("Supermatter exploded at ([x],[y],[z] - JMP)",0,1) log_game("SUPERMATTER([x],[y],[z]) Exploded. Power:[power], Oxygen:[oxygen], Damage:[damage], Integrity:[get_integrity()]") - anchored = 1 + anchored = TRUE grav_pulling = 1 exploded = 1 sleep(pull_time) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 7846ff6ff1..068b131cf8 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -9,7 +9,7 @@ desc = "It's an underfloor wiring terminal for power equipment." level = 1 var/obj/machinery/power/master = null - anchored = 1 + anchored = TRUE plane = PLATING_PLANE layer = WIRES_LAYER+0.01 diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index c03d7db3b6..299d4de823 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -8,8 +8,8 @@ desc = "A solar directional tracker." icon = 'icons/obj/power.dmi' icon_state = "tracker" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE use_power = USE_POWER_OFF var/glass_type = /obj/item/stack/material/glass diff --git a/code/modules/projectiles/guns/automatic_fire.dm b/code/modules/projectiles/guns/automatic_fire.dm index 25e1e3a461..e85c33a485 100644 --- a/code/modules/projectiles/guns/automatic_fire.dm +++ b/code/modules/projectiles/guns/automatic_fire.dm @@ -8,8 +8,8 @@ /obj/screen/auto_target name = "targeter" icon = null//We dont want people to see this guy - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/obj/item/weapon/gun/gun var/active = 0//Just tells us that it was clicked on so we should start shooting var/delay_del = 0//Delays the del if we retarget without shooting diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm index e5f1b7bfbe..c74c8520e5 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm @@ -44,7 +44,7 @@ base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone spread_step = 10 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" /obj/item/ammo_casing/microbattery/combat/ion @@ -64,7 +64,7 @@ nodamage = 1 agony = 5 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" /obj/item/projectile/bullet/stripper/on_hit(var/atom/stripped) diff --git a/code/modules/projectiles/guns/energy/gunsword_vr.dm b/code/modules/projectiles/guns/energy/gunsword_vr.dm index e5ffffc05d..cd28b53c90 100644 --- a/code/modules/projectiles/guns/energy/gunsword_vr.dm +++ b/code/modules/projectiles/guns/energy/gunsword_vr.dm @@ -48,8 +48,8 @@ var/active_throwforce = 20 var/active_w_class = ITEMSIZE_LARGE var/active_embed_chance = 0 //In the off chance one of these is supposed to embed, you can just tweak this var - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE armor_penetration = 50 flags = NOBLOODY var/lrange = 2 @@ -66,8 +66,8 @@ embed_chance = active_embed_chance force = active_force throwforce = active_throwforce - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE w_class = active_w_class playsound(src, 'sound/weapons/saberon.ogg', 50, 1) set_light(lrange, lpower, lcolor) diff --git a/code/modules/projectiles/guns/energy/laser_vr.dm b/code/modules/projectiles/guns/energy/laser_vr.dm index 91ea6a23c8..989e2b2b25 100644 --- a/code/modules/projectiles/guns/energy/laser_vr.dm +++ b/code/modules/projectiles/guns/energy/laser_vr.dm @@ -203,7 +203,7 @@ charge_cost = 300 battery_lock = 1 - unacidable = 1 + unacidable = TRUE var/recharging = 0 var/phase_power = 75 diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm index 6422a88bdf..18c8d15597 100644 --- a/code/modules/projectiles/guns/launcher/crossbow.dm +++ b/code/modules/projectiles/guns/launcher/crossbow.dm @@ -10,8 +10,8 @@ pickup_sound = 'sound/items/pickup/sword.ogg' throwforce = 8 w_class = ITEMSIZE_NORMAL - sharp = 1 - edge = 0 + sharp = TRUE + edge = FALSE /obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart. return @@ -19,8 +19,8 @@ /obj/item/weapon/spike name = "alloy spike" desc = "It's about a foot of weird silver metal with a wicked point." - sharp = 1 - edge = 0 + sharp = TRUE + edge = FALSE throwforce = 5 w_class = ITEMSIZE_SMALL icon = 'icons/obj/weapons.dmi' diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 981e5c988b..3da58638a5 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -23,7 +23,7 @@ to_chat(user, "You carefully insert [syringe] into [src].") user.remove_from_mob(syringe) syringe.loc = src - sharp = 1 + sharp = TRUE name = "syringe dart" update_icon() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index c72d9b35ea..37c99f905a 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -8,7 +8,7 @@ nodamage = 0 check_armour = "bullet" embed_chance = 20 //Modified in the actual embed process, but this should keep embed chance about the same - sharp = 1 + sharp = TRUE hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect var/mob_passthrough_check = 0 @@ -100,7 +100,7 @@ damage = 10 agony = 60 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" /obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols. @@ -108,7 +108,7 @@ damage = 5 agony = 40 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" fire_sound ='sound/weapons/Gunshot_pathetic.ogg' // Rubber shots have less powder in the casing. @@ -126,7 +126,7 @@ damage = 20 agony = 60 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" //Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance. @@ -151,7 +151,7 @@ fire_sound = 'sound/weapons/Laser.ogg' // Really? We got nothing better than this? damage = 15 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" combustion = FALSE @@ -209,7 +209,7 @@ SA_bonus_damage = 35 // 50 total on animals. SA_vulnerability = SA_ANIMAL -/obj/item/projectile/bullet/rifle/a145 // 14.5×114mm is bigger than a .50 BMG round. +/obj/item/projectile/bullet/rifle/a145 // 14.5�114mm is bigger than a .50 BMG round. fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon. damage = 80 stun = 3 @@ -249,7 +249,7 @@ fire_sound = 'sound/effects/Explosion1.ogg' damage = 20 embed_chance = 0 - edge = 1 + edge = TRUE /obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0) if(isturf(target)) @@ -305,7 +305,7 @@ damage = 0 nodamage = 1 embed_chance = 0 - sharp = 0 + sharp = FALSE combustion = FALSE @@ -320,7 +320,7 @@ damage = 0 nodamage = 1 embed_chance = 0 - sharp = 0 + sharp = FALSE /obj/item/projectile/bullet/blank/cap/process() loc = null diff --git a/code/modules/projectiles/projectile/bullets_vr.dm b/code/modules/projectiles/projectile/bullets_vr.dm index 7b27a08942..2f927afe99 100644 --- a/code/modules/projectiles/projectile/bullets_vr.dm +++ b/code/modules/projectiles/projectile/bullets_vr.dm @@ -2,7 +2,7 @@ damage = 10 agony = 60 embed_chance = 0 - sharp = 0 + sharp = FALSE check_armour = "melee" /obj/item/projectile/energy/flash/strong diff --git a/code/modules/projectiles/projectile/hook.dm b/code/modules/projectiles/projectile/hook.dm index 35b39910a0..a6568e7b75 100644 --- a/code/modules/projectiles/projectile/hook.dm +++ b/code/modules/projectiles/projectile/hook.dm @@ -42,7 +42,7 @@ if(I_HURT) check_armour = "bullet" damage *= 3 - sharp = 1 + sharp = TRUE agony = 20 if(I_GRAB) check_armour = "melee" diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 9c06241ecf..ee75074cc7 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -41,8 +41,8 @@ icon_state= "bolter" damage = 50 check_armour = "bullet" - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE /obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) explosion(target, -1, 0, 2) diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 67525bdc5b..a732d3c8ef 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -3,11 +3,11 @@ desc = "Stick 'em up!" icon = 'icons/effects/Targeted.dmi' icon_state = "locking" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE opacity = 0 plane = ABOVE_PLANE - simulated = 0 + simulated = FALSE mouse_opacity = 0 var/mob/living/aiming_at // Who are we currently targeting, if anyone? diff --git a/code/modules/random_map/automata/diona.dm b/code/modules/random_map/automata/diona.dm index d6bee1c0ff..2966c172c2 100644 --- a/code/modules/random_map/automata/diona.dm +++ b/code/modules/random_map/automata/diona.dm @@ -15,8 +15,8 @@ /obj/structure/diona icon = 'icons/obj/diona.dmi' - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE opacity = 0 layer = TURF_LAYER + 0.01 diff --git a/code/modules/random_map/drop/droppod_doors.dm b/code/modules/random_map/drop/droppod_doors.dm index c472a9f1f9..d69e049da6 100644 --- a/code/modules/random_map/drop/droppod_doors.dm +++ b/code/modules/random_map/drop/droppod_doors.dm @@ -3,8 +3,8 @@ desc = "A drop pod door. Opens rapidly using explosive bolts." icon = 'icons/obj/structures.dmi' icon_state = "droppod_door_closed" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE opacity = 1 layer = TURF_LAYER + 0.1 var/deploying @@ -68,7 +68,7 @@ M.throw_at(get_edge_target_turf(origin,src.dir),rand(0,3),50) // Create a decorative ramp bottom and flatten out our current ramp. - density = 0 + density = FALSE set_opacity(0) icon_state = "ramptop" var/obj/structure/droppod_door/door_bottom = new(T) diff --git a/code/modules/reagents/machinery/chem_master.dm b/code/modules/reagents/machinery/chem_master.dm index 9147588d70..6c810251fc 100644 --- a/code/modules/reagents/machinery/chem_master.dm +++ b/code/modules/reagents/machinery/chem_master.dm @@ -1,8 +1,8 @@ /obj/machinery/chem_master name = "ChemMaster 3000" desc = "Used to seperate and package chemicals in to patches, pills, or bottles. Warranty void if used to create Space Drugs." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE icon = 'icons/obj/chemical.dmi' icon_state = "mixer0" circuit = /obj/item/weapon/circuitboard/chem_master diff --git a/code/modules/reagents/machinery/dispenser/cartridge.dm b/code/modules/reagents/machinery/dispenser/cartridge.dm index 0e2b09eb57..ded38cf561 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge.dm @@ -9,7 +9,7 @@ amount_per_transfer_from_this = 50 // Large, but inaccurate. Use a chem dispenser or beaker for accuracy. possible_transfer_amounts = list(50, 100, 250, 500) - unacidable = 1 + unacidable = TRUE var/spawn_reagent = null var/label = "" diff --git a/code/modules/reagents/machinery/dispenser/dispenser2.dm b/code/modules/reagents/machinery/dispenser/dispenser2.dm index c956409dc9..fcc358274a 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser2.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser2.dm @@ -17,7 +17,7 @@ use_power = USE_POWER_IDLE idle_power_usage = 100 - anchored = 1 + anchored = TRUE /obj/machinery/chemical_dispenser/Initialize() . = ..() diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index 9536c272a3..d4784809d1 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." @@ -468,3 +469,946 @@ /obj/structure/reagent_dispenser/he3/Initialize() ..() reagents.add_reagent("helium3",1000) +||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) +/obj/structure/reagent_dispensers + name = "Dispenser" + desc = "..." + icon = 'icons/obj/objects.dmi' + icon_state = "watertank" + layer = TABLE_LAYER + density = 1 + anchored = 0 + pressure_resistance = 2*ONE_ATMOSPHERE + + var/obj/item/hose_connector/input/active/InputSocket + var/obj/item/hose_connector/output/active/OutputSocket + + var/amount_per_transfer_from_this = 10 + var/possible_transfer_amounts = list(10,25,50,100) + +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) + return + +/obj/structure/reagent_dispensers/Destroy() + QDEL_NULL(InputSocket) + QDEL_NULL(OutputSocket) + + ..() + +/obj/structure/reagent_dispensers/Initialize() + var/datum/reagents/R = new/datum/reagents(5000) + reagents = R + R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + + InputSocket = new(src) + InputSocket.carrier = src + OutputSocket = new(src) + OutputSocket.carrier = src + + . = ..() + +/obj/structure/reagent_dispensers/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + . += "[R.volume] units of [R.name]" + else + . += "Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) + if (N) + amount_per_transfer_from_this = N + +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + else + return + +/obj/structure/reagent_dispensers/blob_act() + qdel(src) + + + +//Dispensers +/obj/structure/reagent_dispensers/watertank + name = "watertank" + desc = "A watertank." + icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit + icon_state = "watertank" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/watertank/Initialize() + . = ..() + reagents.add_reagent("water", 1000) + +/obj/structure/reagent_dispensers/watertank/high + name = "high-capacity water tank" + desc = "A highly-pressurized water tank made to hold vast amounts of water.." + icon_state = "watertank_high" + +/obj/structure/reagent_dispensers/watertank/high/Initialize() + . = ..() + reagents.add_reagent("water", 4000) + +/obj/structure/reagent_dispensers/fueltank + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + var/modded = 0 + var/obj/item/device/assembly_holder/rig = null + +/obj/structure/reagent_dispensers/fueltank/Initialize() + . = ..() + reagents.add_reagent("fuel",1000) + +//VOREStation Add +/obj/structure/reagent_dispensers/fueltank/high + name = "high-capacity fuel tank" + desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." + icon_state = "weldtank_high" + +/obj/structure/reagent_dispensers/fueltank/high/Initialize() + . = ..() + reagents.add_reagent("fuel",4000) + +/obj/structure/reagent_dispensers/foam + name = "foamtank" + desc = "A foam tank." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "foamtank" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/foam/Initialize() + . = ..() + reagents.add_reagent("firefoam",1000) + +/obj/structure/reagent_dispensers/fueltank/barrel + name = "hazardous barrel" + desc = "An open-topped barrel full of nasty-looking liquid." + icon_state = "barrel" + modded = TRUE + +/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (W.is_wrench()) //can't wrench it shut, it's always open + return + return ..() +//VOREStation Add End + +/obj/structure/reagent_dispensers/fueltank/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + if(modded) + . += "Fuel faucet is wrenched open, leaking the fuel!" + if(rig) + . += "There is some kind of device rigged to the tank." + +/obj/structure/reagent_dispensers/fueltank/attack_hand() + if (rig) + usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") + if(do_after(usr, 20)) + usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") + rig.loc = get_turf(usr) + rig = null + overlays = new/list() + +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) + src.add_fingerprint(user) + if (W.is_wrench()) + user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ + "You wrench [src]'s faucet [modded ? "closed" : "open"]") + modded = modded ? 0 : 1 + playsound(src, W.usesound, 75, 1) + if (modded) + message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") + log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") + leak_fuel(amount_per_transfer_from_this) + if (istype(W,/obj/item/device/assembly_holder)) + if (rig) + to_chat(user, "There is another device in the way.") + return ..() + user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") + if(do_after(user, 20)) + user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") + + var/obj/item/device/assembly_holder/H = W + if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) + message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") + log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") + + rig = W + user.drop_item() + W.loc = src + + var/icon/test = getFlatIcon(W) + test.Shift(NORTH,1) + test.Shift(EAST,6) + add_overlay(test) + + return ..() + + +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + if(istype(Proj.firer)) + message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") + log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") + + if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) + explode() + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/blob_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/proc/explode() + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else if (reagents.total_volume > 50) + explosion(src.loc,-1,1,2) + if(src) + qdel(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) + if (modded) + explode() + else if (temperature > T0C+500) + explode() + return ..() + +/obj/structure/reagent_dispensers/fueltank/Move() + if (..() && modded) + leak_fuel(amount_per_transfer_from_this/10.0) + +/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) + if (reagents.total_volume == 0) + return + + amount = min(amount, reagents.total_volume) + reagents.remove_reagent("fuel",amount) + new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) + +/obj/structure/reagent_dispensers/peppertank + name = "Pepper Spray Refiller" + desc = "Refills pepper spray canisters." + icon = 'icons/obj/objects.dmi' + icon_state = "peppertank" + anchored = 1 + density = 0 + amount_per_transfer_from_this = 45 + +/obj/structure/reagent_dispensers/peppertank/Initialize() + . = ..() + reagents.add_reagent("condensedcapsaicin",1000) + + +/obj/structure/reagent_dispensers/water_cooler + name = "Water-Cooler" + desc = "A machine that dispenses water to drink." + amount_per_transfer_from_this = 5 + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler" + possible_transfer_amounts = null + anchored = 1 + var/bottle = 0 + var/cups = 0 + var/cupholder = 0 + +/obj/structure/reagent_dispensers/water_cooler/full + bottle = 1 + cupholder = 1 + cups = 10 + +/obj/structure/reagent_dispensers/water_cooler/Initialize() + . = ..() + if(bottle) + reagents.add_reagent("water",120) + update_icon() + +/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) + . = ..() + if(cupholder) + . += "There are [cups] cups in the cup dispenser." + +/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() + set name = "Rotate Cooler Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_wrench()) + src.add_fingerprint(user) + if(bottle) + playsound(src, I.usesound, 50, 1) + if(do_after(user, 20) && bottle) + to_chat(user, "You unfasten the jug.") + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + update_icon() + else + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20 * I.toolspeed, src)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + playsound(src, I.usesound, 50, 1) + return + + if(I.is_screwdriver()) + if(cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You take the cup dispenser off.") + new /obj/item/stack/material/plastic( src.loc ) + if(cups) + for(var/i = 0 to cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups = 0 + cupholder = 0 + update_icon() + return + if(!bottle && !cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You start taking the water-cooler apart.") + if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) + to_chat(user, "You take the water-cooler apart.") + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + src.add_fingerprint(user) + if(!bottle) + if(anchored) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + to_chat(user, "You start to screw the bottle onto the water-cooler.") + if(do_after(user, 20) && !bottle && anchored) + bottle = 1 + update_icon() + to_chat(user, "You screw the bottle onto the water-cooler!") + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a bottle there!") + return 1 + + if(istype(I, /obj/item/stack/material/plastic)) + if(!cupholder) + if(anchored) + var/obj/item/stack/material/plastic/P = I + src.add_fingerprint(user) + to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && !cupholder && anchored) + if (P.use(1)) + to_chat(user, "You attach a cup dispenser onto the water-cooler.") + cupholder = 1 + update_icon() + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a cup dispenser there!") + return + +/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) + if(cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups-- + flick("[icon_state]-vend", src) + return + +/obj/structure/reagent_dispensers/water_cooler/update_icon() + icon_state = "water_cooler" + cut_overlays() + if(bottle) + add_overlay("water_cooler_bottle") + +/obj/structure/reagent_dispensers/beerkeg + name = "beer keg" + desc = "A beer keg." + icon = 'icons/obj/objects.dmi' + icon_state = "beertankTEMP" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/beerkeg/Initialize() + . = ..() + reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/fakenuke + name = "nuclear beer keg" + desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nuclearbomb0" + +/obj/structure/reagent_dispensers/virusfood + name = "Virus Food Dispenser" + desc = "A dispenser of virus food. Yum." + icon = 'icons/obj/objects.dmi' + icon_state = "virusfoodtank" + amount_per_transfer_from_this = 10 + anchored = 1 + +/obj/structure/reagent_dispensers/virusfood/Initialize() + . = ..() + reagents.add_reagent("virusfood", 1000) + +/obj/structure/reagent_dispensers/acid + name = "Sulphuric Acid Dispenser" + desc = "A dispenser of acid for industrial processes." + icon = 'icons/obj/objects.dmi' + icon_state = "acidtank" + amount_per_transfer_from_this = 10 + anchored = 1 + +/obj/structure/reagent_dispensers/acid/Initialize() + . = ..() + reagents.add_reagent("sacid", 1000) + +//Cooking oil refill tank +/obj/structure/reagent_dispensers/cookingoil + name = "cooking oil tank" + desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 120 + +/obj/structure/reagent_dispensers/cookingoil/New() + ..() + reagents.add_reagent("cornoil",5000) + +/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + explode() + +/obj/structure/reagent_dispensers/cookingoil/ex_act() + explode() + +/obj/structure/reagent_dispensers/cookingoil/proc/explode() + reagents.splash_area(get_turf(src), 3) + visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) + qdel(src) + +/obj/structure/reagent_dispensers/he3 + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects.dmi' + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispenser/he3/Initialize() + ..() + reagents.add_reagent("helium3",1000) +======= +/obj/structure/reagent_dispensers + name = "Dispenser" + desc = "..." + icon = 'icons/obj/objects.dmi' + icon_state = "watertank" + layer = TABLE_LAYER + density = TRUE + anchored = FALSE + pressure_resistance = 2*ONE_ATMOSPHERE + + var/obj/item/hose_connector/input/active/InputSocket + var/obj/item/hose_connector/output/active/OutputSocket + + var/amount_per_transfer_from_this = 10 + var/possible_transfer_amounts = list(10,25,50,100) + +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) + return + +/obj/structure/reagent_dispensers/Destroy() + QDEL_NULL(InputSocket) + QDEL_NULL(OutputSocket) + + ..() + +/obj/structure/reagent_dispensers/Initialize() + var/datum/reagents/R = new/datum/reagents(5000) + reagents = R + R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + + InputSocket = new(src) + InputSocket.carrier = src + OutputSocket = new(src) + OutputSocket.carrier = src + + . = ..() + +/obj/structure/reagent_dispensers/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + . += "It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + . += "[R.volume] units of [R.name]" + else + . += "Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) + if (N) + amount_per_transfer_from_this = N + +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + else + return + +/obj/structure/reagent_dispensers/blob_act() + qdel(src) + + + +//Dispensers +/obj/structure/reagent_dispensers/watertank + name = "watertank" + desc = "A watertank." + icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit + icon_state = "watertank" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/watertank/Initialize() + . = ..() + reagents.add_reagent("water", 1000) + +/obj/structure/reagent_dispensers/watertank/high + name = "high-capacity water tank" + desc = "A highly-pressurized water tank made to hold vast amounts of water.." + icon_state = "watertank_high" + +/obj/structure/reagent_dispensers/watertank/high/Initialize() + . = ..() + reagents.add_reagent("water", 4000) + +/obj/structure/reagent_dispensers/fueltank + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + var/modded = 0 + var/obj/item/device/assembly_holder/rig = null + +/obj/structure/reagent_dispensers/fueltank/Initialize() + . = ..() + reagents.add_reagent("fuel",1000) + +//VOREStation Add +/obj/structure/reagent_dispensers/fueltank/high + name = "high-capacity fuel tank" + desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." + icon_state = "weldtank_high" + +/obj/structure/reagent_dispensers/fueltank/high/Initialize() + . = ..() + reagents.add_reagent("fuel",4000) + +/obj/structure/reagent_dispensers/foam + name = "foamtank" + desc = "A foam tank." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "foamtank" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/foam/Initialize() + . = ..() + reagents.add_reagent("firefoam",1000) + +/obj/structure/reagent_dispensers/fueltank/barrel + name = "hazardous barrel" + desc = "An open-topped barrel full of nasty-looking liquid." + icon_state = "barrel" + modded = TRUE + +/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (W.is_wrench()) //can't wrench it shut, it's always open + return + return ..() +//VOREStation Add End + +/obj/structure/reagent_dispensers/fueltank/examine(mob/user) + . = ..() + if(get_dist(user, src) <= 2) + if(modded) + . += "Fuel faucet is wrenched open, leaking the fuel!" + if(rig) + . += "There is some kind of device rigged to the tank." + +/obj/structure/reagent_dispensers/fueltank/attack_hand() + if (rig) + usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") + if(do_after(usr, 20)) + usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") + rig.loc = get_turf(usr) + rig = null + overlays = new/list() + +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) + src.add_fingerprint(user) + if (W.is_wrench()) + user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ + "You wrench [src]'s faucet [modded ? "closed" : "open"]") + modded = modded ? 0 : 1 + playsound(src, W.usesound, 75, 1) + if (modded) + message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") + log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") + leak_fuel(amount_per_transfer_from_this) + if (istype(W,/obj/item/device/assembly_holder)) + if (rig) + to_chat(user, "There is another device in the way.") + return ..() + user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") + if(do_after(user, 20)) + user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") + + var/obj/item/device/assembly_holder/H = W + if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) + message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") + log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") + + rig = W + user.drop_item() + W.loc = src + + var/icon/test = getFlatIcon(W) + test.Shift(NORTH,1) + test.Shift(EAST,6) + add_overlay(test) + + return ..() + + +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + if(istype(Proj.firer)) + message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") + log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") + + if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) + explode() + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/blob_act() + explode() + +/obj/structure/reagent_dispensers/fueltank/proc/explode() + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else if (reagents.total_volume > 50) + explosion(src.loc,-1,1,2) + if(src) + qdel(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) + if (modded) + explode() + else if (temperature > T0C+500) + explode() + return ..() + +/obj/structure/reagent_dispensers/fueltank/Move() + if (..() && modded) + leak_fuel(amount_per_transfer_from_this/10.0) + +/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) + if (reagents.total_volume == 0) + return + + amount = min(amount, reagents.total_volume) + reagents.remove_reagent("fuel",amount) + new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) + +/obj/structure/reagent_dispensers/peppertank + name = "Pepper Spray Refiller" + desc = "Refills pepper spray canisters." + icon = 'icons/obj/objects.dmi' + icon_state = "peppertank" + anchored = TRUE + density = FALSE + amount_per_transfer_from_this = 45 + +/obj/structure/reagent_dispensers/peppertank/Initialize() + . = ..() + reagents.add_reagent("condensedcapsaicin",1000) + + +/obj/structure/reagent_dispensers/water_cooler + name = "Water-Cooler" + desc = "A machine that dispenses water to drink." + amount_per_transfer_from_this = 5 + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler" + possible_transfer_amounts = null + anchored = TRUE + var/bottle = 0 + var/cups = 0 + var/cupholder = 0 + +/obj/structure/reagent_dispensers/water_cooler/full + bottle = 1 + cupholder = 1 + cups = 10 + +/obj/structure/reagent_dispensers/water_cooler/Initialize() + . = ..() + if(bottle) + reagents.add_reagent("water",120) + update_icon() + +/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) + . = ..() + if(cupholder) + . += "There are [cups] cups in the cup dispenser." + +/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() + set name = "Rotate Cooler Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 270)) + return 1 + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_wrench()) + src.add_fingerprint(user) + if(bottle) + playsound(src, I.usesound, 50, 1) + if(do_after(user, 20) && bottle) + to_chat(user, "You unfasten the jug.") + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + update_icon() + else + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20 * I.toolspeed, src)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + playsound(src, I.usesound, 50, 1) + return + + if(I.is_screwdriver()) + if(cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You take the cup dispenser off.") + new /obj/item/stack/material/plastic( src.loc ) + if(cups) + for(var/i = 0 to cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups = 0 + cupholder = 0 + update_icon() + return + if(!bottle && !cupholder) + playsound(src, I.usesound, 50, 1) + to_chat(user, "You start taking the water-cooler apart.") + if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) + to_chat(user, "You take the water-cooler apart.") + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + src.add_fingerprint(user) + if(!bottle) + if(anchored) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + to_chat(user, "You start to screw the bottle onto the water-cooler.") + if(do_after(user, 20) && !bottle && anchored) + bottle = 1 + update_icon() + to_chat(user, "You screw the bottle onto the water-cooler!") + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a bottle there!") + return 1 + + if(istype(I, /obj/item/stack/material/plastic)) + if(!cupholder) + if(anchored) + var/obj/item/stack/material/plastic/P = I + src.add_fingerprint(user) + to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && !cupholder && anchored) + if (P.use(1)) + to_chat(user, "You attach a cup dispenser onto the water-cooler.") + cupholder = 1 + update_icon() + else + to_chat(user, "You need to wrench down the cooler first.") + else + to_chat(user, "There is already a cup dispenser there!") + return + +/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) + if(cups) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) + cups-- + flick("[icon_state]-vend", src) + return + +/obj/structure/reagent_dispensers/water_cooler/update_icon() + icon_state = "water_cooler" + cut_overlays() + if(bottle) + add_overlay("water_cooler_bottle") + +/obj/structure/reagent_dispensers/beerkeg + name = "beer keg" + desc = "A beer keg." + icon = 'icons/obj/objects.dmi' + icon_state = "beertankTEMP" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispensers/beerkeg/Initialize() + . = ..() + reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/fakenuke + name = "nuclear beer keg" + desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nuclearbomb0" + +/obj/structure/reagent_dispensers/virusfood + name = "Virus Food Dispenser" + desc = "A dispenser of virus food. Yum." + icon = 'icons/obj/objects.dmi' + icon_state = "virusfoodtank" + amount_per_transfer_from_this = 10 + anchored = TRUE + +/obj/structure/reagent_dispensers/virusfood/Initialize() + . = ..() + reagents.add_reagent("virusfood", 1000) + +/obj/structure/reagent_dispensers/acid + name = "Sulphuric Acid Dispenser" + desc = "A dispenser of acid for industrial processes." + icon = 'icons/obj/objects.dmi' + icon_state = "acidtank" + amount_per_transfer_from_this = 10 + anchored = TRUE + +/obj/structure/reagent_dispensers/acid/Initialize() + . = ..() + reagents.add_reagent("sacid", 1000) + +//Cooking oil refill tank +/obj/structure/reagent_dispensers/cookingoil + name = "cooking oil tank" + desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 120 + +/obj/structure/reagent_dispensers/cookingoil/New() + ..() + reagents.add_reagent("cornoil",5000) + +/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + explode() + +/obj/structure/reagent_dispensers/cookingoil/ex_act() + explode() + +/obj/structure/reagent_dispensers/cookingoil/proc/explode() + reagents.splash_area(get_turf(src), 3) + visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) + qdel(src) + +/obj/structure/reagent_dispensers/he3 + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects.dmi' + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + +/obj/structure/reagent_dispenser/he3/Initialize() + ..() + reagents.add_reagent("helium3",1000) +>>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) diff --git a/code/modules/reagents/machinery/grinder.dm b/code/modules/reagents/machinery/grinder.dm index f913f7947b..51cf0d2153 100644 --- a/code/modules/reagents/machinery/grinder.dm +++ b/code/modules/reagents/machinery/grinder.dm @@ -4,8 +4,8 @@ desc = "Grinds stuff into itty bitty bits." icon = 'icons/obj/kitchen.dmi' icon_state = "juicer1" - density = 0 - anchored = 0 + density = FALSE + anchored = FALSE use_power = USE_POWER_IDLE idle_power_usage = 5 active_power_usage = 100 diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index fc37770284..1c0369adc5 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -15,7 +15,7 @@ volume = 60 w_class = ITEMSIZE_SMALL flags = OPENCONTAINER | NOCONDUCT - unacidable = 1 //glass doesn't dissolve in acid + unacidable = TRUE //glass doesn't dissolve in acid drop_sound = 'sound/items/drop/bottle.ogg' pickup_sound = 'sound/items/pickup/bottle.ogg' @@ -270,7 +270,7 @@ possible_transfer_amounts = list(10,20,30,60,120) volume = 120 flags = OPENCONTAINER - unacidable = 0 + unacidable = FALSE drop_sound = 'sound/items/drop/helm.ogg' pickup_sound = 'sound/items/pickup/helm.ogg' @@ -328,7 +328,7 @@ possible_transfer_amounts = list(10,20,30,60,120) volume = 120 flags = OPENCONTAINER - unacidable = 0 + unacidable = FALSE drop_sound = 'sound/items/drop/wooden.ogg' pickup_sound = 'sound/items/pickup/wooden.ogg' diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 5f05faeb70..62a469d315 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -9,7 +9,7 @@ item_state = "hypo" icon_state = "hypo" amount_per_transfer_from_this = 5 - unacidable = 1 + unacidable = TRUE volume = 30 possible_transfer_amounts = null flags = OPENCONTAINER diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 237e9a4070..34068bd456 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -13,7 +13,7 @@ throw_speed = 2 throw_range = 10 amount_per_transfer_from_this = 10 - unacidable = 1 //plastic + unacidable = TRUE //plastic possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one. var/spray_size = 3 var/list/spray_sizes = list(1,3) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index c8fc2ea379..3ef20ceeda 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -18,8 +18,8 @@ volume = 15 w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS - sharp = 1 - unacidable = 1 //glass + sharp = TRUE + unacidable = TRUE //glass var/mode = SYRINGE_DRAW var/image/filling //holds a reference to the current filling overlay var/visible_name = "a syringe" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index d31b1f9378..8e54b057f8 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -12,7 +12,7 @@ desc = "A conveyor belt." plane = TURF_PLANE layer = ABOVE_TURF_LAYER - anchored = 1 + anchored = TRUE circuit = /obj/item/weapon/circuitboard/conveyor var/operating = OFF // 1 if running forward, -1 if backwards, 0 if off var/operable = 1 // true if can operate (no broken segments in this belt run) @@ -197,7 +197,7 @@ var/id = "" // must match conveyor IDs to control them var/list/conveyors // the list of converyors that are controlled by this switch - anchored = 1 + anchored = TRUE var/speed_active = FALSE // are the linked conveyors on SSfastprocess? diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 957d7662c3..2416f68826 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -7,8 +7,8 @@ desc = "A huge pipe segment used for constructing disposal systems." icon = 'icons/obj/pipes/disposal.dmi' icon_state = "conpipe-s" - anchored = 0 - density = 0 + anchored = FALSE + density = FALSE pressure_resistance = 5*ONE_ATMOSPHERE matter = list(MAT_STEEL = 1850) level = 2 @@ -37,7 +37,7 @@ switch(ptype) if(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE) - density = 1 + density = TRUE if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED) subtype = newsubtype @@ -248,12 +248,12 @@ // wrench: (un)anchor if(I.is_wrench()) if(anchored) - anchored = 0 + anchored = FALSE if(ispipe) level = 2 - density = 0 + density = FALSE else - density = 1 + density = TRUE to_chat(user, "You detach the [nicetype] from the underfloor.") else if(ptype == DISPOSAL_PIPE_BIN || ptype == DISPOSAL_PIPE_OUTLET || ptype == DISPOSAL_PIPE_CHUTE) // Disposal or outlet @@ -274,12 +274,12 @@ to_chat(user, "There is already a [nicetype] at that location.") return - anchored = 1 + anchored = TRUE if(ispipe) level = 1 // We don't want disposal bins to disappear under the floors - density = 0 + density = FALSE else - density = 1 // We don't want disposal bins or outlets to go density 0 + density = TRUE // We don't want disposal bins or outlets to go density 0 to_chat(user, "You attach the [nicetype] to the underfloor.") playsound(src, I.usesound, 100, 1) update() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index ae9a97c5d1..b3be3111b4 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -14,8 +14,8 @@ desc = "A pneumatic waste disposal unit." icon = 'icons/obj/pipes/disposal.dmi' icon_state = "disposal" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/datum/gas_mixture/air_contents // internal reservoir var/mode = 1 // item mode 0=off 1=charging 2=charged var/flush = 0 // true if flush handle is pulled @@ -741,8 +741,8 @@ icon = 'icons/obj/pipes/disposal.dmi' name = "disposal pipe" desc = "An underfloor disposal pipe." - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE level = 1 // underfloor only var/dpdir = 0 // bitmask of pipe directions @@ -1513,8 +1513,8 @@ desc = "An outlet for the pneumatic disposal system." icon = 'icons/obj/pipes/disposal.dmi' icon_state = "outlet" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/active = 0 var/turf/target // this will be where the output objects are 'thrown' to. var/mode = 0 diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 84e140ee4b..8a5a199a6c 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit icon_state = "deliverycloset" var/obj/wrapped = null - density = 1 + density = TRUE var/sortTag = null flags = NOBLUDGEON mouse_drag_pointer = MOUSE_ACTIVE_POINTER @@ -374,7 +374,7 @@ /obj/machinery/disposal/deliveryChute name = "Delivery chute" desc = "A chute for big and small packages alike!" - density = 1 + density = TRUE icon_state = "intake" var/c_mode = 0 diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index b81b5910fc..0a96055e32 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -52,8 +52,8 @@ var/global/list/obj/machinery/message_server/message_servers = list() icon_state = "server" name = "Messaging Server" desc = "Facilitates both PDA messages and request console functions." - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 100 @@ -237,8 +237,8 @@ var/obj/machinery/blackbox_recorder/blackbox icon_state = "blackbox" name = "Blackbox Recorder" desc = "Records all radio communications, as well as various other information in case of the worst." - density = 1 - anchored = 1.0 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 10 active_power_usage = 100 diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index e317c665d0..76bbe9d167 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -5,8 +5,8 @@ /obj/machinery/r_n_d name = "R&D Device" icon = 'icons/obj/machines/research.dmi' - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE var/busy = 0 var/obj/machinery/computer/rdconsole/linked_console diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index ade23c1dfc..205db962b0 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -197,8 +197,8 @@ icon = 'icons/obj/machines/synthpod.dmi' icon_state = "pod_0" circuit = /obj/item/weapon/circuitboard/transhuman_synthprinter - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/list/stored_material = list(MAT_STEEL = 30000, MAT_GLASS = 30000) var/connected //What console it's done up with @@ -424,9 +424,9 @@ icon = 'icons/obj/machines/implantchair.dmi' icon_state = "implantchair" circuit = /obj/item/weapon/circuitboard/transhuman_resleever - density = 1 + density = TRUE opacity = 0 - anchored = 1 + anchored = TRUE var/blur_amount var/confuse_amount diff --git a/code/modules/rogueminer_vr/landmarks.dm b/code/modules/rogueminer_vr/landmarks.dm index cef03695ea..881c0aa813 100644 --- a/code/modules/rogueminer_vr/landmarks.dm +++ b/code/modules/rogueminer_vr/landmarks.dm @@ -8,7 +8,7 @@ icon = 'icons/mob/screen1.dmi' icon_state = "x2" invisibility = 101 - anchored = 1 + anchored = TRUE var/datum/rogue/asteroid/myasteroid /obj/asteroid_spawner/New() @@ -21,7 +21,7 @@ icon = 'icons/mob/screen1.dmi' icon_state = "x" invisibility = 101 - anchored = 1 + anchored = TRUE var/mob/mymob /obj/rogue_mobspawner/New() diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 8956e9e3c8..8bb68514fb 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -16,7 +16,7 @@ var/mob/event_confirmed_by //1 = select event //2 = authenticate - anchored = 1.0 + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 53790689a9..53c2f129ea 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -3,10 +3,10 @@ desc = "An energy shield used to contain hull breaches." icon = 'icons/effects/effects.dmi' icon_state = "shield-old" - density = 1 + density = TRUE opacity = 0 - anchored = 1 - unacidable = 1 + anchored = TRUE + unacidable = TRUE can_atmos_pass = ATMOS_PASS_NO var/const/max_health = 200 var/health = max_health //The shield can only take so much beating (prevents perma-prisons) @@ -35,7 +35,7 @@ /obj/machinery/shield/Destroy() opacity = 0 - density = 0 + density = FALSE update_nearby_tiles() ..() @@ -120,9 +120,9 @@ desc = "Used to seal minor hull breaches." icon = 'icons/obj/objects.dmi' icon_state = "shieldoff" - density = 1 + density = TRUE opacity = 0 - anchored = 0 + anchored = FALSE pressure_resistance = 2*ONE_ATMOSPHERE req_access = list(access_engine) var/const/max_health = 100 @@ -310,12 +310,12 @@ if(active) to_chat(user, "The [src] shuts off!") src.shields_down() - anchored = 0 + anchored = FALSE else if(istype(get_turf(src), /turf/space)) return //No wrenching these in space! playsound(src, W.usesound, 100, 1) to_chat(user, "You secure the [src] to the floor!") - anchored = 1 + anchored = TRUE else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm index 7176baf23b..04e9738349 100644 --- a/code/modules/shieldgen/energy_field.dm +++ b/code/modules/shieldgen/energy_field.dm @@ -14,10 +14,10 @@ icon = 'icons/obj/machines/shielding.dmi' icon_state = "shield" alpha = 100 - anchored = 1 + anchored = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER - density = 0 + density = FALSE can_atmos_pass = ATMOS_PASS_DENSITY var/obj/machinery/shield_gen/my_gen = null var/strength = 0 // in Renwicks @@ -101,13 +101,13 @@ ticks_recovering = min(ticks_recovering + 2, 10) if(strength < 1) // We broke - density = 0 + density = FALSE ticks_recovering = 10 strength = 0 else if(amount > 0) // Healing damage. if(strength >= 1) - density = 1 + density = TRUE if(density != old_density) update_icon() diff --git a/code/modules/shieldgen/energy_shield.dm b/code/modules/shieldgen/energy_shield.dm index c13c43496a..0982b2d3b8 100644 --- a/code/modules/shieldgen/energy_shield.dm +++ b/code/modules/shieldgen/energy_shield.dm @@ -6,10 +6,10 @@ desc = "An impenetrable field of energy, capable of blocking anything as long as it's active." icon = 'icons/obj/machines/shielding_vr.dmi' icon_state = "shield" - anchored = 1 + anchored = TRUE plane = MOB_PLANE layer = ABOVE_MOB_LAYER - density = 1 + density = TRUE invisibility = 0 var/obj/machinery/power/shield_generator/gen = null // Owning generator var/disabled_for = 0 diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index b510c8b36b..2d4b7d6484 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -4,8 +4,8 @@ desc = "A shield generator." icon = 'icons/obj/stationobjs.dmi' icon_state = "Shield_Gen" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE req_access = list(access_engine_equip) var/active = 0 var/power = 0 @@ -224,9 +224,9 @@ desc = "An energy shield." icon = 'icons/effects/effects.dmi' icon_state = "shieldwall" - anchored = 1 - density = 1 - unacidable = 1 + anchored = TRUE + density = TRUE + unacidable = TRUE light_range = 3 var/needs_power = 0 var/active = 1 diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index 35cd71e134..b1ba46b57a 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/machines/shielding.dmi' icon_state = "capacitor" var/active = 0 - density = 1 + density = TRUE var/stored_charge = 0 //not to be confused with power cell charge, this is in Joules var/last_stored_charge = 0 var/time_since_fail = 100 diff --git a/code/modules/shieldgen/shield_diffuser.dm b/code/modules/shieldgen/shield_diffuser.dm index f8d9328402..d5ec71f736 100644 --- a/code/modules/shieldgen/shield_diffuser.dm +++ b/code/modules/shieldgen/shield_diffuser.dm @@ -8,8 +8,8 @@ use_power = USE_POWER_ACTIVE idle_power_usage = 25 // Previously 100. active_power_usage = 500 // Previously 2000 - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE level = 1 var/alarm = 0 var/enabled = 1 diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index af9d10d444..bf40ac9052 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -7,7 +7,7 @@ var/field_radius = 3 var/max_field_radius = 150 var/list/field = list() - density = 1 + density = TRUE var/locked = 0 var/average_field_strength = 0 var/strengthen_rate = 0.2 diff --git a/code/modules/shieldgen/shield_generator.dm b/code/modules/shieldgen/shield_generator.dm index 2ab1d3ff5b..48d712bf53 100644 --- a/code/modules/shieldgen/shield_generator.dm +++ b/code/modules/shieldgen/shield_generator.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/machines/shielding_vr.dmi' icon_state = "generator0" circuit = /obj/item/weapon/circuitboard/shield_generator - density = 1 + density = TRUE var/datum/wires/shield_generator/wires = null var/list/field_segments = list() // List of all shield segments owned by this generator. var/list/damaged_segments = list() // List of shield segments that have failed and are currently regenerating. diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm index 28a5c86a8b..cb65c4067c 100644 --- a/code/modules/shuttles/landmarks.dm +++ b/code/modules/shuttles/landmarks.dm @@ -3,9 +3,9 @@ name = "Nav Point" icon = 'icons/effects/effects.dmi' icon_state = "energynet" - anchored = 1 - unacidable = 1 - simulated = 0 + anchored = TRUE + unacidable = TRUE + simulated = FALSE invisibility = 101 flags = SLANDMARK_FLAG_AUTOSET // We generally want to use current area/turf as base. @@ -180,7 +180,7 @@ return active = 1 - anchored = 1 + anchored = TRUE var/obj/effect/shuttle_landmark/automatic/mark = new(T) mark.name = ("Beacon signal ([T.x],[T.y])") diff --git a/code/modules/spells/aoe_turf/conjure/forcewall.dm b/code/modules/spells/aoe_turf/conjure/forcewall.dm index 6d6bfdc3d8..92643b6e6d 100644 --- a/code/modules/spells/aoe_turf/conjure/forcewall.dm +++ b/code/modules/spells/aoe_turf/conjure/forcewall.dm @@ -29,10 +29,10 @@ name = "FORCEWALL" icon = 'icons/effects/effects.dmi' icon_state = "m_shield" - anchored = 1.0 + anchored = TRUE opacity = 0 - density = 1 - unacidable = 1 + density = TRUE + unacidable = TRUE invisibility = 101 /obj/effect/forcefield/bullet_act(var/obj/item/projectile/Proj, var/def_zone) diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm index e31cec5b4c..a5c98bc571 100644 --- a/code/modules/spells/targeted/ethereal_jaunt.dm +++ b/code/modules/spells/targeted/ethereal_jaunt.dm @@ -74,8 +74,8 @@ icon_state = "nothing" var/canmove = 1 var/reappearing = 0 - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE var/turf/last_valid_turf /obj/effect/dummy/spell_jaunt/New(var/location) diff --git a/code/modules/tables/bench.dm b/code/modules/tables/bench.dm index 88c2b61526..f1ae3d141b 100644 --- a/code/modules/tables/bench.dm +++ b/code/modules/tables/bench.dm @@ -5,7 +5,7 @@ desc = "It's a bench, for putting things on. Or standing on, if you really want to." can_reinforce = 0 flipped = -1 - density = 0 + density = FALSE /obj/structure/table/bench/update_desc() if(material) diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm index 18bcc4fe58..cc6be3352b 100644 --- a/code/modules/tables/flipping.dm +++ b/code/modules/tables/flipping.dm @@ -86,7 +86,7 @@ if(dir != NORTH) plane = MOB_PLANE layer = ABOVE_MOB_LAYER - climbable = 0 //flipping tables allows them to be used as makeshift barriers + climbable = FALSE //flipping tables allows them to be used as makeshift barriers flipped = 1 flags |= ON_BORDER for(var/D in list(turn(direction, 90), turn(direction, -90))) diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index 914c478e17..55d0127661 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -5,9 +5,9 @@ var/list/table_icon_cache = list() icon = 'icons/obj/tables.dmi' icon_state = "frame" desc = "It's a table, for putting things on. Or standing on, if you really want to." - density = 1 - anchored = 1 - climbable = 1 + density = TRUE + anchored = TRUE + climbable = TRUE layer = TABLE_LAYER throwpass = 1 surgery_odds = 50 //VOREStation Edit diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index a5ee8cbd93..86f2279a89 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -4,7 +4,7 @@ desc = "A bluespace telepad used for teleporting objects to and from a location." icon = 'icons/obj/telescience.dmi' icon_state = "pad-idle" - anchored = 1 + anchored = TRUE use_power = USE_POWER_IDLE circuit = /obj/item/weapon/circuitboard/telesci_pad idle_power_usage = 200 diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm index a638fbbad4..4a17deabc2 100644 --- a/code/modules/turbolift/turbolift_console.dm +++ b/code/modules/turbolift/turbolift_console.dm @@ -2,8 +2,8 @@ /obj/structure/lift name = "turbolift control component" icon = 'icons/obj/turbolift.dmi' - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE plane = MOB_PLANE var/datum/turbolift/lift diff --git a/code/modules/vehicles/Securitrain_vr.dm b/code/modules/vehicles/Securitrain_vr.dm index 1c52b6a4ea..a57430d426 100644 --- a/code/modules/vehicles/Securitrain_vr.dm +++ b/code/modules/vehicles/Securitrain_vr.dm @@ -39,7 +39,7 @@ desc = "A trolly designed to transport security personnel or prisoners." icon = 'icons/obj/vehicles_vr.dmi' icon_state = "paddy_trailer" - anchored = 0 + anchored = FALSE passenger_allowed = 1 locked = 0 @@ -384,6 +384,6 @@ src.active_engines = active_engines if(!lead && !tow) - anchored = 0 + anchored = FALSE else - anchored = 1 + anchored = TRUE diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index 915e2687ba..783ed376d3 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -157,7 +157,7 @@ /obj/vehicle/bike/turn_on() ion.start() - anchored = 1 + anchored = TRUE update_icon() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 37da72f536..0f102110e8 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -30,7 +30,7 @@ desc = "A large, flat platform made for putting things on. Or people." icon = 'icons/obj/vehicles_vr.dmi' //VOREStation Edit icon_state = "cargo_trailer" - anchored = 0 + anchored = FALSE passenger_allowed = 0 locked = 0 @@ -385,9 +385,9 @@ src.active_engines = active_engines if(!lead && !tow) - anchored = 0 + anchored = FALSE else - anchored = 1 + anchored = TRUE // VOREStation Edit Start - Overlay stuff for the chair-like effect /obj/vehicle/train/engine/update_icon() diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm index 7f5eee732c..c66b2987b0 100644 --- a/code/modules/vehicles/quad.dm +++ b/code/modules/vehicles/quad.dm @@ -160,7 +160,7 @@ name = "all terrain trailer" icon = 'icons/obj/vehicles_64x64.dmi' icon_state = "quadtrailer" - anchored = 0 + anchored = FALSE passenger_allowed = 1 buckle_lying = 1 locked = 0 diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm index 1367408743..50d7dba8f9 100644 --- a/code/modules/vehicles/rover_vr.dm +++ b/code/modules/vehicles/rover_vr.dm @@ -47,7 +47,7 @@ desc = "A trolley designed to transport security equipment to a scene." icon = 'icons/obj/vehicles_vr.dmi' icon_state = "secitemcarrierbot" - anchored = 0 + anchored = FALSE passenger_allowed = 0 locked = 0 @@ -397,6 +397,6 @@ src.active_engines = active_engines if(!lead && !tow) - anchored = 0 + anchored = FALSE else - anchored = 1 + anchored = TRUE diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 44be1f6bd3..856a32e310 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -8,12 +8,12 @@ name = "vehicle" icon = 'icons/obj/vehicles.dmi' layer = MOB_LAYER + 0.1 //so it sits above objects including mobs - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE animate_movement=1 light_range = 3 - can_buckle = 1 + can_buckle = TRUE buckle_movable = 1 buckle_lying = 0 diff --git a/code/modules/virus2/analyser.dm b/code/modules/virus2/analyser.dm index b45dba31ed..5a736c28f7 100644 --- a/code/modules/virus2/analyser.dm +++ b/code/modules/virus2/analyser.dm @@ -3,8 +3,8 @@ desc = "Analyzes diseases to find out information about them!" icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "analyser" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/scanning = 0 var/pause = 0 diff --git a/code/modules/virus2/biohazard destroyer.dm b/code/modules/virus2/biohazard destroyer.dm index 7d05c2f607..eabb3f8c62 100644 --- a/code/modules/virus2/biohazard destroyer.dm +++ b/code/modules/virus2/biohazard destroyer.dm @@ -3,8 +3,8 @@ icon = 'icons/obj/pipes/disposal.dmi' icon_state = "disposalbio" var/list/accepts = list(/obj/item/clothing,/obj/item/weapon/virusdish/,/obj/item/weapon/cureimplanter,/obj/item/weapon/diseasedisk,/obj/item/weapon/reagent_containers) - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE /obj/machinery/disease2/biodestroyer/attackby(var/obj/I as obj, var/mob/user as mob) for(var/path in accepts) diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm index 9dd935247a..399aca8738 100644 --- a/code/modules/virus2/dishincubator.dm +++ b/code/modules/virus2/dishincubator.dm @@ -1,8 +1,8 @@ /obj/machinery/disease2/incubator/ name = "pathogenic incubator" desc = "Encourages the growth of diseases. This model comes with a dispenser system and a small radiation generator." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "incubator" var/obj/item/weapon/virusdish/dish diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm index d4053e8e52..61fa5cf820 100644 --- a/code/modules/virus2/isolator.dm +++ b/code/modules/virus2/isolator.dm @@ -1,8 +1,8 @@ /obj/machinery/disease2/isolator/ name = "pathogenic isolator" desc = "Used to isolate and identify diseases, allowing for comparison with a remote database." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "isolator" var/isolating = 0 diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 9eba770312..23801db70f 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -173,8 +173,8 @@ item_state = "joanariamob" origin_tech = "materials=7" force = 15 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE hitsound = 'sound/weapons/bladeslice.ogg' @@ -933,8 +933,8 @@ icon_state = "stunstaff00" var/base_icon = "stunstaff" force = 5 - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE throwforce = 7 w_class = ITEMSIZE_HUGE origin_tech = list(TECH_COMBAT = 2) @@ -1029,8 +1029,8 @@ var/active_throwforce var/active_w_class var/active_embed_chance = 0 - sharp = 0 - edge = 0 + sharp = FALSE + edge = FALSE /obj/item/weapon/melee/fluffstuff/proc/activate(mob/living/user) if(active) @@ -1039,8 +1039,8 @@ embed_chance = active_embed_chance force = active_force throwforce = active_throwforce - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE w_class = active_w_class playsound(src, 'sound/weapons/sparkle.ogg', 50, 1) @@ -1112,8 +1112,8 @@ ..() attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE icon_state = "[active_state]_sharp" damtype = BRUTE diff --git a/code/modules/vore/smoleworld/smoleworld_vr.dm b/code/modules/vore/smoleworld/smoleworld_vr.dm index ca6a7ae828..7f0529805a 100644 --- a/code/modules/vore/smoleworld/smoleworld_vr.dm +++ b/code/modules/vore/smoleworld/smoleworld_vr.dm @@ -108,7 +108,7 @@ /obj/structure/smoletrack icon = 'icons/vore/smoleworld_vr.dmi' color = "#ffffff" - density = 0 + density = FALSE /obj/structure/smoletrack/attack_hand(mob/user) if(user.a_intent == I_DISARM) @@ -164,35 +164,35 @@ icon = 'icons/vore/smoleworld_vr.dmi' icon_state = "carstraight" desc = "A long set of tiny road." - anchored = 1 + anchored = TRUE /obj/structure/smoletrack/roadT name = "road threeway piece" icon = 'icons/vore/smoleworld_vr.dmi' icon_state = "carthreeway" desc = "A tiny threeway road piece." - anchored = 1 + anchored = TRUE /obj/structure/smoletrack/roadturn name = "road turn piece" icon = 'icons/vore/smoleworld_vr.dmi' icon_state = "carturn" desc = "A tiny turn road piece." - anchored = 1 + anchored = TRUE /obj/structure/smoletrack/roadF name = "road four-way piece" icon = 'icons/vore/smoleworld_vr.dmi' icon_state = "carfourway" desc = "A four-way road piece." - anchored = 1 + anchored = TRUE //buildings code //Defining building actions /obj/structure/smolebuilding icon = 'icons/vore/smoleworld_vr.dmi' - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE color = "#ffffff" var/health = 75 var/damage @@ -317,7 +317,7 @@ /obj/structure/smoleruins icon = 'icons/vore/smoleworld_vr.dmi' icon_state = "ruins" - density = 0 + density = FALSE /obj/structure/smolebuilding/houses name = "smole houses" diff --git a/code/modules/vore/weight/fitness_machines_vr.dm b/code/modules/vore/weight/fitness_machines_vr.dm index e9125b26d8..ca6267ba49 100644 --- a/code/modules/vore/weight/fitness_machines_vr.dm +++ b/code/modules/vore/weight/fitness_machines_vr.dm @@ -2,7 +2,7 @@ name = "workout equipment" desc = "A utility often used to lose weight." icon = 'icons/obj/machines/fitness_machines_vr.dmi' - anchored = 1 + anchored = TRUE use_power = USE_POWER_OFF idle_power_usage = 0 active_power_usage = 0 @@ -32,8 +32,8 @@ name = "punching bag" desc = "A bag often used to relieve stress and burn fat." icon_state = "punchingbag" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE workout_sounds = list( "punch") messages = list( @@ -87,7 +87,7 @@ icon = 'icons/obj/machines/fitness_machines_vr.dmi' icon_state = "scale" desc = "A scale used to measure ones weight relative to their size and species." - anchored = 1 // Set to 0 when we can construct or dismantle these. + anchored = TRUE // Set to 0 when we can construct or dismantle these. use_power = USE_POWER_OFF idle_power_usage = 0 active_power_usage = 0 diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm index 795cd9d6df..f9ac6ef4f5 100644 --- a/code/modules/xenoarcheaology/anomaly_container.dm +++ b/code/modules/xenoarcheaology/anomaly_container.dm @@ -3,7 +3,7 @@ desc = "Used to safely contain and move anomalies." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "anomaly_container" - density = 1 + density = TRUE var/obj/machinery/artifact/contained diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 3344afa24e..bbf54ed469 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "ano00" var/icon_num = 0 - density = 1 + density = TRUE var/datum/artifact_effect/my_effect var/datum/artifact_effect/secondary_effect var/being_used = 0 diff --git a/code/modules/xenoarcheaology/artifacts/autocloner.dm b/code/modules/xenoarcheaology/artifacts/autocloner.dm index 28cb0a7360..96195fd700 100644 --- a/code/modules/xenoarcheaology/artifacts/autocloner.dm +++ b/code/modules/xenoarcheaology/artifacts/autocloner.dm @@ -7,7 +7,7 @@ var/time_spent_spawning = 0 var/time_per_spawn = 0 var/last_process= 0 - density = 1 + density = TRUE var/previous_power_state = 0 use_power = USE_POWER_IDLE diff --git a/code/modules/xenoarcheaology/artifacts/crystal.dm b/code/modules/xenoarcheaology/artifacts/crystal.dm index c090c23a3f..a1d93d824b 100644 --- a/code/modules/xenoarcheaology/artifacts/crystal.dm +++ b/code/modules/xenoarcheaology/artifacts/crystal.dm @@ -2,7 +2,7 @@ name = "large crystal" icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "crystal" - density = 1 + density = TRUE /obj/structure/crystal/New() ..() diff --git a/code/modules/xenoarcheaology/artifacts/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/gigadrill.dm index b30b1ed959..5579f3d9a6 100644 --- a/code/modules/xenoarcheaology/artifacts/gigadrill.dm +++ b/code/modules/xenoarcheaology/artifacts/gigadrill.dm @@ -6,7 +6,7 @@ var/active = 0 var/drill_time = 10 var/turf/drilling_turf - density = 1 + density = TRUE layer = ABOVE_JUNK_LAYER /obj/machinery/giga_drill/attack_hand(mob/user as mob) @@ -25,10 +25,10 @@ var/turf/simulated/mineral/M = A drilling_turf = get_turf(src) src.visible_message("\The [src] begins to drill into \the [M].") - anchored = 1 + anchored = TRUE spawn(drill_time) if(get_turf(src) == drilling_turf && active) M.GetDrilled() src.loc = M drilling_turf = null - anchored = 0 + anchored = FALSE diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index a1f069e546..f3ad6d674c 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -3,7 +3,7 @@ desc = "It's some kind of pod with strange wires and gadgets all over it." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "borgcharger0(old)" - density = 1 + density = TRUE idle_power_usage = 100 active_power_usage = 1000 diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index b66ed8f0e6..7baa254643 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -3,9 +3,9 @@ desc = "Leftover rock from an excavation, it's been partially dug out already but there's still a lot to go." icon = 'icons/obj/mining.dmi' icon_state = "boulder1" - density = 1 + density = TRUE opacity = 1 - anchored = 1 + anchored = TRUE var/excavation_level = 0 var/datum/geosample/geological_data var/datum/artifact_find/artifact_find diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm index 69aa73a02f..02a5096b98 100644 --- a/code/modules/xenoarcheaology/finds/special.dm +++ b/code/modules/xenoarcheaology/finds/special.dm @@ -170,7 +170,7 @@ name = "shadow wight" icon = 'icons/mob/mob.dmi' icon_state = "shade" - density = 1 + density = TRUE /obj/effect/shadow_wight/New() START_PROCESSING(SSobj, src) diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm index 3cdea12960..f9fc735f2e 100644 --- a/code/modules/xenoarcheaology/sampling.dm +++ b/code/modules/xenoarcheaology/sampling.dm @@ -5,7 +5,7 @@ icon_state = "sliver1" randpixel = 8 w_class = ITEMSIZE_TINY - sharp = 1 + sharp = TRUE var/datum/geosample/geological_data /obj/item/weapon/rocksliver/New() diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 090bef1c28..8c159e0ad0 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -3,8 +3,8 @@ desc = "Studies the emissions of anomalous materials to discover their uses." icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "isolator" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/scan_in_progress = 0 var/scan_num = 0 var/obj/scanned_obj diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index b149b52ec1..b2bb4db83c 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -2,8 +2,8 @@ name = "Exotic Particle Harvester" icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "incubator" //incubator_on - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE idle_power_usage = 50 active_power_usage = 750 use_power = USE_POWER_IDLE diff --git a/code/modules/xenoarcheaology/tools/artifact_scanner.dm b/code/modules/xenoarcheaology/tools/artifact_scanner.dm index c5bdfe015a..2b1a1196ca 100644 --- a/code/modules/xenoarcheaology/tools/artifact_scanner.dm +++ b/code/modules/xenoarcheaology/tools/artifact_scanner.dm @@ -3,5 +3,5 @@ desc = "Place things here for scanning." icon = 'icons/obj/stationobjs.dmi' icon_state = "tele0" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm index d6711db804..dc634789bf 100644 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm @@ -1,8 +1,8 @@ /obj/machinery/radiocarbon_spectrometer name = "radiocarbon spectrometer" desc = "A specialised, complex scanner for gleaning information on all manner of small things." - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "analyser" diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm index cd39d0e181..08d41fc121 100644 --- a/code/modules/xenoarcheaology/tools/suspension_generator.dm +++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm @@ -3,7 +3,7 @@ desc = "It has stubby legs bolted up against it's body for stabilising." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "suspension2" - density = 1 + density = TRUE req_access = list(access_research) var/obj/item/weapon/cell/cell var/locked = TRUE @@ -95,9 +95,9 @@ else if(W.is_wrench()) if(!suspension_field) if(anchored) - anchored = 0 + anchored = FALSE else - anchored = 1 + anchored = TRUE playsound(src, W.usesound, 50, 1) to_chat(user, "You wrench the stabilising legs [anchored ? "into place" : "up against the body"].") if(anchored) @@ -198,8 +198,8 @@ /obj/effect/suspension_field name = "energy field" icon = 'icons/effects/effects.dmi' - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE /obj/effect/suspension_field/Destroy() for(var/atom/movable/I in src) diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm index 7962976a0e..ddca8b6fe5 100644 --- a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm +++ b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm @@ -125,7 +125,7 @@ /obj/item/weapon/pickaxe/hand) max_storage_space = ITEMSIZE_COST_SMALL * 9 max_w_class = ITEMSIZE_SMALL - use_to_pickup = 1 + use_to_pickup = TRUE /obj/item/weapon/storage/excavation/New() ..() diff --git a/code/modules/xenobio2/machinery/core_extractor.dm b/code/modules/xenobio2/machinery/core_extractor.dm index 01068e4cd1..4a6b8651e2 100644 --- a/code/modules/xenobio2/machinery/core_extractor.dm +++ b/code/modules/xenobio2/machinery/core_extractor.dm @@ -8,8 +8,8 @@ desc = "A machine for cutting up slimes to get to their cores." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "scanner_0old" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/slimeextractor var/inuse var/mob/living/simple_mob/xeno/slime/occupant = null diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm index 4438c60fdf..c896f14309 100644 --- a/code/modules/xenobio2/machinery/gene_manipulators.dm +++ b/code/modules/xenobio2/machinery/gene_manipulators.dm @@ -40,8 +40,8 @@ new /obj/item/weapon/disk/xenobio(src) /obj/machinery/xenobio - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE var/obj/item/weapon/disk/xenobio/loaded_disk //Currently loaded data disk. diff --git a/code/modules/xenobio2/machinery/injector.dm b/code/modules/xenobio2/machinery/injector.dm index 2c0454a8e2..3e31b54cd8 100644 --- a/code/modules/xenobio2/machinery/injector.dm +++ b/code/modules/xenobio2/machinery/injector.dm @@ -8,8 +8,8 @@ /obj/machinery/xenobio2/manualinjector name = "biological injector" desc = "Injects biological organisms that are inserted with the contents of an inserted beaker at the command of a remote computer." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE icon = 'icons/obj/biogenerator.dmi' icon_state = "biogen-work" diff --git a/code/modules/xenobio2/machinery/slime_replicator.dm b/code/modules/xenobio2/machinery/slime_replicator.dm index b5e49b7c62..f845ad6e8d 100644 --- a/code/modules/xenobio2/machinery/slime_replicator.dm +++ b/code/modules/xenobio2/machinery/slime_replicator.dm @@ -8,8 +8,8 @@ desc = "A machine for creating slimes from cores. Amazing!" icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "restruct_0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE circuit = /obj/item/weapon/circuitboard/slimereplicator var/obj/item/xenoproduct/slime/core/core = null var/inuse From 257787e880d9e403fd6855fbc773cf9e92fe082c Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:13:42 -0400 Subject: [PATCH 11/17] powder that makes you say yes --- code/game/objects/effects/alien/aliens.dm | 256 ---------------------- 1 file changed, 256 deletions(-) diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm index 9cdc62b40f..0cc5868762 100644 --- a/code/game/objects/effects/alien/aliens.dm +++ b/code/game/objects/effects/alien/aliens.dm @@ -421,260 +421,4 @@ visible_message("[src.target] begins to crumble under the acid!") spawn(rand(150, 200)) tick() -<<<<<<< HEAD //CHOMPedit old eggs removed -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) -/* - * Egg - */ -/var/const //for the status var - BURST = 0 - BURSTING = 1 - GROWING = 2 - GROWN = 3 - - MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger - MAX_GROWTH_TIME = 3000 - -/obj/effect/alien/egg - desc = "It looks like a weird egg" - name = "egg" -// icon_state = "egg_growing" // So the egg looks 'grown', even though it's not. - icon_state = "egg" - density = 0 - anchored = 1 - - var/health = 100 - var/status = BURST //can be GROWING, GROWN or BURST; all mutually exclusive - -/obj/effect/alien/egg/New() -/* - if(config.aliens_allowed) - ..() - spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME)) - Grow() - else - qdel(src) -*/ -/obj/effect/alien/egg/attack_hand(user as mob) - - var/mob/living/carbon/M = user - if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)) - return attack_hand(user) - - switch(status) - if(BURST) - to_chat(user, "You clear the hatched egg.") - qdel(src) - return -/* if(GROWING) - to_chat(user, "The child is not developed yet.") - return - if(GROWN) - to_chat(user, "You retrieve the child.") - Burst(0) - return - -/obj/effect/alien/egg/proc/GetFacehugger() // Commented out for future edit. - return locate(/obj/item/clothing/mask/facehugger) in contents - -/obj/effect/alien/egg/proc/Grow() - icon_state = "egg" -// status = GROWN - status = BURST -// new /obj/item/clothing/mask/facehugger(src) - return -*/ -/obj/effect/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining - if(status == GROWN || status == GROWING) -// var/obj/item/clothing/mask/facehugger/child = GetFacehugger() - icon_state = "egg_hatched" -/* flick("egg_opening", src) - status = BURSTING - spawn(15) - status = BURST - child.loc = get_turf(src) - - if(kill && istype(child)) - child.Die() - else - for(var/mob/M in range(1,src)) - if(CanHug(M)) - child.Attach(M) - break -*/ -/obj/effect/alien/egg/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/effect/alien/egg/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - user.do_attack_animation(src) - health -= damage - healthcheck() - return - -/obj/effect/alien/egg/take_damage(var/damage) - health -= damage - healthcheck() - return - - -/obj/effect/alien/egg/attackby(var/obj/item/weapon/W, var/mob/user) - if(health <= 0) - return - if(LAZYLEN(W.attack_verb)) - src.visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") - else - src.visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") - var/damage = W.force / 4.0 - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - src.health -= damage - src.healthcheck() - - -/obj/effect/alien/egg/proc/healthcheck() - if(health <= 0) - Burst() - -/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 500 + T0C) - health -= 5 - healthcheck() -======= -/* - * Egg - */ -/var/const //for the status var - BURST = 0 - BURSTING = 1 - GROWING = 2 - GROWN = 3 - - MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger - MAX_GROWTH_TIME = 3000 - -/obj/effect/alien/egg - desc = "It looks like a weird egg" - name = "egg" -// icon_state = "egg_growing" // So the egg looks 'grown', even though it's not. - icon_state = "egg" - density = FALSE - anchored = TRUE - - var/health = 100 - var/status = BURST //can be GROWING, GROWN or BURST; all mutually exclusive - -/obj/effect/alien/egg/New() -/* - if(config.aliens_allowed) - ..() - spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME)) - Grow() - else - qdel(src) -*/ -/obj/effect/alien/egg/attack_hand(user as mob) - - var/mob/living/carbon/M = user - if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)) - return attack_hand(user) - - switch(status) - if(BURST) - to_chat(user, "You clear the hatched egg.") - qdel(src) - return -/* if(GROWING) - to_chat(user, "The child is not developed yet.") - return - if(GROWN) - to_chat(user, "You retrieve the child.") - Burst(0) - return - -/obj/effect/alien/egg/proc/GetFacehugger() // Commented out for future edit. - return locate(/obj/item/clothing/mask/facehugger) in contents - -/obj/effect/alien/egg/proc/Grow() - icon_state = "egg" -// status = GROWN - status = BURST -// new /obj/item/clothing/mask/facehugger(src) - return -*/ -/obj/effect/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining - if(status == GROWN || status == GROWING) -// var/obj/item/clothing/mask/facehugger/child = GetFacehugger() - icon_state = "egg_hatched" -/* flick("egg_opening", src) - status = BURSTING - spawn(15) - status = BURST - child.loc = get_turf(src) - - if(kill && istype(child)) - child.Die() - else - for(var/mob/M in range(1,src)) - if(CanHug(M)) - child.Attach(M) - break -*/ -/obj/effect/alien/egg/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/effect/alien/egg/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - user.do_attack_animation(src) - health -= damage - healthcheck() - return - -/obj/effect/alien/egg/take_damage(var/damage) - health -= damage - healthcheck() - return - - -/obj/effect/alien/egg/attackby(var/obj/item/weapon/W, var/mob/user) - if(health <= 0) - return - if(LAZYLEN(W.attack_verb)) - src.visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") - else - src.visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") - var/damage = W.force / 4.0 - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - src.health -= damage - src.healthcheck() - - -/obj/effect/alien/egg/proc/healthcheck() - if(health <= 0) - Burst() - -/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 500 + T0C) - health -= 5 - healthcheck() ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) From f201b53fe44e61a9bb6606924ac746ce88b063e1 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:15:52 -0400 Subject: [PATCH 12/17] powder that makes you say yes --- code/game/objects/items/weapons/material/twohanded.dm | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 289efe0774..180b95b802 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -90,19 +90,9 @@ unwielded_force_divisor = 0.25 force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor dulled_divisor = 0.75 //Still metal on a stick -<<<<<<< HEAD - sharp = 1 - edge = 1 - w_class = ITEMSIZE_HUGE //CHOMP Edit -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) - sharp = 1 - edge = 1 - w_class = ITEMSIZE_LARGE -======= sharp = TRUE edge = TRUE w_class = ITEMSIZE_LARGE ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) slot_flags = SLOT_BACK force_wielded = 30 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") From 03561c03d6e796e5817dc5eec67c13c65276a488 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:20:44 -0400 Subject: [PATCH 13/17] powder that makes you say yes --- code/modules/mining/mine_turfs.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 76738f2654..9155f054a4 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -5,8 +5,7 @@ var/list/mining_overlay_cache = list() name = "impassable rock" icon = 'icons/turf/walls.dmi' icon_state = "rock-dark" -<<<<<<< HEAD - density = 1 + density = TRUE opacity = 1 // YW edit. Stops all my unsimulated tiles from being seethrough. //YW add start @@ -16,11 +15,6 @@ var/list/mining_overlay_cache = list() icon = 'icons/turf/snow_new.dmi' icon_state = "Icerock" //YW add end -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) - density = 1 -======= - density = TRUE ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) /turf/simulated/mineral //wall piece name = "rock" From 2d9e3d2415ab3ba1a5d8bdafd28af7657cebbdcd Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:26:42 -0400 Subject: [PATCH 14/17] powder that makes you say yes --- code/modules/mob/dead/observer/observer.dm | 2000 +------------------- 1 file changed, 2 insertions(+), 1998 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d8cb355f93..9e80b75da5 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1,8 +1,7 @@ -<<<<<<< HEAD /mob/observer name = "observer" desc = "This shouldn't appear" - density = 0 + density = FALSE vis_flags = NONE /mob/observer/dead @@ -13,7 +12,7 @@ stat = DEAD canmove = 0 blinded = 0 - anchored = 1 // don't get pushed around + anchored = TRUE // don't get pushed around var/can_reenter_corpse var/datum/hud/living/carbon/hud = null // hud @@ -995,1998 +994,3 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Respawn" set category = "Ghost" src.abandon_mob() -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) -/mob/observer - name = "observer" - desc = "This shouldn't appear" - density = 0 - vis_flags = NONE - -/mob/observer/dead - name = "ghost" - desc = "It's a g-g-g-g-ghooooost!" //jinkies! - icon = 'icons/mob/ghost.dmi' - icon_state = "ghost" - stat = DEAD - canmove = 0 - blinded = 0 - anchored = 1 // don't get pushed around - - var/can_reenter_corpse - var/datum/hud/living/carbon/hud = null // hud - var/bootime = 0 - var/started_as_observer //This variable is set to 1 when you enter the game as an observer. - //If you died in the game and are a ghsot - this will remain as null. - //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. - var/has_enabled_antagHUD = 0 - var/medHUD = 0 - var/secHUD = 0 - var/antagHUD = 0 - universal_speak = 1 - var/atom/movable/following = null - var/admin_ghosted = 0 - var/anonsay = 0 - var/ghostvision = 1 //is the ghost able to see things humans can't? - incorporeal_move = 1 - - var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil. - var/ghost_sprite = null - var/global/list/possible_ghost_sprites = list( - "Clear" = "blank", - "Green Blob" = "otherthing", - "Bland" = "ghost", - "Robed-B" = "ghost1", - "Robed-BAlt" = "ghost2", - "King" = "ghostking", - "Shade" = "shade", - "Hecate" = "ghost-narsie", - "Glowing Statue" = "armour", - "Artificer" = "artificer", - "Behemoth" = "behemoth", - "Harvester" = "harvester", - "Wraith" = "wraith", - "Viscerator" = "viscerator", - "Corgi" = "corgi", - "Tamaskan" = "tamaskan", - "Black Cat" = "blackcat", - "Lizard" = "lizard", - "Goat" = "goat", - "Space Bear" = "bear", - "Bats" = "bat", - "Chicken" = "chicken_white", - "Parrot"= "parrot_fly", - "Goose" = "goose", - "Penguin" = "penguin", - "Brown Crab" = "crab", - "Gray Crab" = "evilcrab", - "Trout" = "trout-swim", - "Salmon" = "salmon-swim", - "Pike" = "pike-swim", - "Koi" = "koi-swim", - "Carp" = "carp", - "Red Robes" = "robe_red", - "Faithless" = "faithless", - "Shadowform" = "forgotten", - "Dark Ethereal" = "bloodguardian", - "Holy Ethereal" = "lightguardian", - "Red Elemental" = "magicRed", - "Blue Elemental" = "magicBlue", - "Pink Elemental" = "magicPink", - "Orange Elemental" = "magicOrange", - "Green Elemental" = "magicGreen", - "Daemon" = "daemon", - "Guard Spider" = "guard", - "Hunter Spider" = "hunter", - "Nurse Spider" = "nurse", - "Rogue Drone" = "drone", - "ED-209" = "ed209", - "Beepsky" = "secbot" - ) - var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners. - var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns - -/mob/observer/dead/New(mob/body) - - appearance = body - invisibility = INVISIBILITY_OBSERVER - layer = BELOW_MOB_LAYER - plane = PLANE_GHOSTS - alpha = 127 - - sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF - see_invisible = SEE_INVISIBLE_OBSERVER - see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but... - - var/turf/T - if(ismob(body)) - T = get_turf(body) //Where is the body located? - attack_log = body.attack_log //preserve our attack logs by copying them to our ghost - gender = body.gender - if(body.mind && body.mind.name) - name = body.mind.name - else - if(body.real_name) - name = body.real_name - else - if(gender == MALE) - name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - else - name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - - mind = body.mind //we don't transfer the mind but we keep a reference to it. - - // Fix for naked ghosts. - // Unclear why this isn't being grabbed by appearance. - if(ishuman(body)) - var/mob/living/carbon/human/H = body - add_overlay(H.overlays_standing) - - if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position - forceMove(T) - - if(!name) //To prevent nameless ghosts - name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - real_name = name - animate(src, pixel_y = 2, time = 10, loop = -1) - observer_mob_list += src - ..() - -/mob/observer/dead/Topic(href, href_list) - if (href_list["track"]) - var/mob/target = locate(href_list["track"]) in mob_list - if(target) - ManualFollow(target) - if(href_list["reenter"]) - reenter_corpse() - return - -/mob/observer/dead/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/weapon/book/tome)) - var/mob/observer/dead/M = src - M.manifest(user) - -/mob/observer/dead/CanPass(atom/movable/mover, turf/target) - return TRUE - -/mob/observer/dead/set_stat(var/new_stat) - if(new_stat != DEAD) - CRASH("It is best if observers stay dead, thank you.") - -/mob/observer/dead/examine_icon() - var/icon/I = get_cached_examine_icon(src) - if(!I) - I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE) - set_cached_examine_icon(src, I, 200 SECONDS) - return I - -/mob/observer/dead/examine(mob/user) - . = ..() - - if(is_admin(user)) - . += "\t>[ADMIN_FULLMONTY(src)]" - -/* -Transfer_mind is there to check if mob is being deleted/not going to have a body. -Works together with spawning an observer, noted above. -*/ - -/mob/observer/dead/Life() - ..() - if(!loc) return - if(!client) return 0 - - handle_regular_hud_updates() - handle_vision() - -/mob/proc/ghostize(var/can_reenter_corpse = 1) - if(key) - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.vr_holder && !can_reenter_corpse) - H.exit_vr() - return 0 - var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc. - ghost.can_reenter_corpse = can_reenter_corpse - ghost.timeofdeath = src.timeofdeath //BS12 EDIT - ghost.key = key - if(istype(loc, /obj/structure/morgue)) - var/obj/structure/morgue/M = loc - M.update() - else if(istype(loc, /obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = loc - B.update() - if(ghost.client) - ghost.client.time_died_as_mouse = ghost.timeofdeath - if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! - return ghost - -/* -This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. -*/ -/mob/living/verb/ghost() - set category = "OOC" - set name = "Ghost" - set desc = "Relinquish your life and enter the land of the dead." - - if(stat == DEAD && !forbid_seeing_deadchat) - announce_ghost_joinleave(ghostize(1)) - else - var/response - if(src.client && src.client.holder) - response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Ghost", "Admin Ghost", "Stay in body")) - if(response == "Admin Ghost") - if(!src.client) - return - src.client.admin_ghost() - else - response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Ghost", "Stay in body")) // VOREStation edit because we don't make players stay dead for 30 minutes. - if(response != "Ghost") - return - resting = 1 - var/turf/location = get_turf(src) - var/special_role = check_special_role() - if(!istype(loc,/obj/machinery/cryopod)) - log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (JMP)",usr) - else if(special_role) - log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr) - var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 - if(ghost) - ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. - ghost.set_respawn_timer() - announce_ghost_joinleave(ghost) - -/mob/observer/dead/can_use_hands() return 0 -/mob/observer/dead/is_active() return 0 - -/mob/observer/dead/Stat() - ..() - if(statpanel("Status")) - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - -/mob/observer/dead/verb/reenter_corpse() - set category = "Ghost" - set name = "Re-enter Corpse" - if(!client) return - if(!(mind && mind.current && can_reenter_corpse)) - to_chat(src, "You have no body.") - return - if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients - to_chat(usr, "Another consciousness is in your body... it is resisting you.") - return - //VOREStation Add - if(prevent_respawns.Find(mind.name)) - to_chat(usr, "You already quit this round as this character, sorry!") - return - //VOREStation Add End - if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). - var/found_rune - for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune - if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune. - found_rune = 1 - break - if(!found_rune) - to_chat(usr, "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.") - return - mind.current.ajourn=0 - mind.current.key = key - mind.current.teleop = null - if(istype(mind.current.loc, /obj/structure/morgue)) - var/obj/structure/morgue/M = mind.current.loc - M.update(1) - else if(istype(mind.current.loc, /obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = mind.current.loc - B.update(1) - if(!admin_ghosted) - announce_ghost_joinleave(mind, 0, "They now occupy their body again.") - return 1 - -/mob/observer/dead/verb/toggle_medHUD() - set category = "Ghost" - set name = "Toggle MedicHUD" - set desc = "Toggles Medical HUD allowing you to see how everyone is doing" - - medHUD = !medHUD - plane_holder.set_vis(VIS_CH_HEALTH, medHUD) - plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD) - to_chat(src, "Medical HUD [medHUD ? "Enabled" : "Disabled"]") - -/mob/observer/dead/verb/toggle_secHUD() - set category = "Ghost" - set name = "Toggle Security HUD" - set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc" - - secHUD = !secHUD - plane_holder.set_vis(VIS_CH_ID, secHUD) - plane_holder.set_vis(VIS_CH_WANTED, secHUD) - plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD) - plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD) - plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD) - to_chat(src, "Security HUD [secHUD ? "Enabled" : "Disabled"]") - -/mob/observer/dead/verb/toggle_antagHUD() - set category = "Ghost" - set name = "Toggle AntagHUD" - set desc = "Toggles AntagHUD allowing you to see who is the antagonist" - - if(!config.antag_hud_allowed && !client.holder) - to_chat(src, "Admins have disabled this for this round.") - return - if(jobban_isbanned(src, "AntagHUD")) - to_chat(src, "You have been banned from using this feature") - return - if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder) - var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No")) - if(response == "No") return - can_reenter_corpse = FALSE - set_respawn_timer(-1) // Foreeeever - if(!has_enabled_antagHUD && !client.holder) - has_enabled_antagHUD = TRUE - - antagHUD = !antagHUD - plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD) - to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]") - -/mob/observer/dead/proc/jumpable_areas() - var/list/areas = return_sorted_areas() - if(client?.holder) - return areas - - for(var/key in areas) - var/area/A = areas[key] - if(A.z in using_map?.secret_levels) - areas -= key - - return areas - -/mob/observer/dead/proc/jumpable_mobs() - var/list/mobs = getmobs() - if(client?.holder) - return mobs - - for(var/key in mobs) - var/mobz = get_z(mobs[key]) - if(mobz in using_map?.secret_levels) - mobs -= key - - return mobs - -/mob/observer/dead/verb/dead_tele(areaname as null|anything in jumpable_areas()) - set name = "Teleport" - set category = "Ghost" - set desc = "Teleport to a location." - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - var/area/A - - if(!areaname) - var/list/areas = jumpable_areas() - var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas) - if(!input) - return - A = areas[input] - if(!A) - return - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname]))) - usr.on_mob_jump() - -/mob/observer/dead/verb/follow(mobname as null|anything in jumpable_mobs()) - set name = "Follow" - set category = "Ghost" - set desc = "Follow and haunt a mob." - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - var/mob/M - - if(!mobname) - var/list/possible_mobs = jumpable_mobs() - var/input = tgui_input_list(usr, "Select a mob:", "Ghost Follow", possible_mobs) - if(!input) - return - M = possible_mobs[input] - if(!M) - return - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - ManualFollow(M || jumpable_mobs()[mobname]) - -/mob/observer/dead/forceMove(atom/destination) - if(client?.holder) - return ..() - - if(get_z(destination) in using_map?.secret_levels) - to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) - if(following) - stop_following() - return - - return ..() - -/mob/observer/dead/Move(atom/newloc, direct = 0, movetime) - if(client?.holder) - return ..() - - if(get_z(newloc) in using_map?.secret_levels) - to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) - if(following) - stop_following() - return - - return ..() - -// This is the ghost's follow verb with an argument -/mob/observer/dead/proc/ManualFollow(var/atom/movable/target) - if(!target) - return - - var/turf/targetloc = get_turf(target) - if(check_holy(targetloc)) - to_chat(usr, "You cannot follow a mob standing on holy grounds!") - return - if(get_z(target) in using_map?.secret_levels) - to_chat(src, SPAN_WARNING("Sorry, that target is in an area that ghosts aren't allowed to go.")) - return - if(target != src) - if(following && following == target) - return - following = target - to_chat(src, "Now following [target]") - if(ismob(target)) - forceMove(get_turf(target)) - var/mob/M = target - M.following_mobs += src - else - spawn(0) - while(target && following == target && client) - var/turf/T = get_turf(target) - if(!T) - break - // To stop the ghost flickering. - if(loc != T) - forceMove(T) - sleep(15) - - var/icon/I = icon(target.icon,target.icon_state,target.dir) - - var/orbitsize = (I.Width()+I.Height())*0.5 - orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) - - var/rot_seg - - /* We don't have this pref yet - switch(ghost_orbit) - if(GHOST_ORBIT_TRIANGLE) - rot_seg = 3 - if(GHOST_ORBIT_SQUARE) - rot_seg = 4 - if(GHOST_ORBIT_PENTAGON) - rot_seg = 5 - if(GHOST_ORBIT_HEXAGON) - rot_seg = 6 - else //Circular - rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle - */ - - orbit(target, orbitsize, FALSE, 20, rot_seg) - -/mob/observer/dead/orbit() - set_dir(2) //reset dir so the right directional sprites show up - return ..() - -/mob/observer/dead/stop_orbit() - . = ..() - //restart our floating animation after orbit is done. - pixel_y = 0 - pixel_x = 0 - transform = null - animate(src, pixel_y = 2, time = 10, loop = -1) - -/mob/observer/dead/proc/stop_following() - following = null - stop_orbit() - -/mob/proc/update_following() - . = get_turf(src) - for(var/mob/observer/dead/M in following_mobs) - if(!.) - M.stop_following() - - if(M.following != src) - following_mobs -= M - else - if(M.loc != .) - M.forceMove(.) - -/mob - var/list/following_mobs = list() - -/mob/Destroy() - for(var/mob/observer/dead/M in following_mobs) - M.stop_following() - following_mobs = null - return ..() - -/mob/observer/dead/Destroy() - if(ismob(following)) - var/mob/M = following - M.following_mobs -= src - stop_following() - observer_mob_list -= src - return ..() - -/mob/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - update_following() - -/mob/Life() - // to catch teleports etc which directly set loc - update_following() - return ..() - -/mob/proc/check_holy(var/turf/T) - return 0 - -/mob/observer/dead/check_holy(var/turf/T) - if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src)) - return 0 - - return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists)) - -/mob/observer/dead/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak - set category = "Ghost" - set name = "Jump to Mob" - set desc = "Teleport to a mob" - set popup_menu = FALSE - - if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer! - return - - var/list/possible_mobs = jumpable_mobs() - var/input = tgui_input_list(usr, "Select a mob:", "Ghost Jump", possible_mobs) - if(!input) - return - - var/target = possible_mobs[input] - if (!target)//Make sure we actually have a target - return - else - var/mob/M = target //Destination mob - var/turf/T = get_turf(M) //Turf of the destination mob - - if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. - forceMove(T) - stop_following() - else - to_chat(src, "This mob is not located in the game world.") - -/mob/observer/dead/memory() - set hidden = 1 - to_chat(src, "You are dead! You have no mind to store memory!") - -/mob/observer/dead/add_memory() - set hidden = 1 - to_chat(src, "You are dead! You have no mind to store memory!") - -/mob/observer/dead/Post_Incorpmove() - stop_following() - -/mob/observer/dead/verb/analyze_air() - set name = "Analyze Air" - set category = "Ghost" - - if(!istype(usr, /mob/observer/dead)) return - - // Shamelessly copied from the Gas Analyzers - if (!( istype(usr.loc, /turf) )) - return - - var/datum/gas_mixture/environment = usr.loc.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles - - to_chat(src, "Results:") - if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(src, "Pressure: [round(pressure,0.1)] kPa") - else - to_chat(src, "Pressure: [round(pressure,0.1)] kPa") - if(total_moles) - for(var/g in environment.gas) - to_chat(src, "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)") - to_chat(src, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)") - to_chat(src, "Heat Capacity: [round(environment.heat_capacity(),0.1)]") - -/mob/observer/dead/verb/check_radiation() - set name = "Check Radiation" - set category = "Ghost" - - var/turf/t = get_turf(src) - if(t) - var/rads = SSradiation.get_rads_at_turf(t) - to_chat(src, "Radiation level: [rads ? rads : "0"] Bq.") - - -/mob/observer/dead/verb/become_mouse() - set name = "Become mouse" - set category = "Ghost" - - if(config.disable_player_mice) - to_chat(src, "Spawning as a mouse is currently disabled.") - return - - if(!MayRespawn(1)) - return - - var/turf/T = get_turf(src) - if(!T || (T.z in using_map.admin_levels)) - to_chat(src, "You may not spawn as a mouse on this Z-level.") - return - - var/timedifference = world.time - client.time_died_as_mouse - if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600) - var/timedifference_text - timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss") - to_chat(src, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.") - return - - var/response = tgui_alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!")) - if(response != "Squeek!") return //Hit the wrong key...again. - - - //find a viable mouse candidate - var/mob/living/simple_mob/animal/passive/mouse/host - var/obj/machinery/atmospherics/unary/vent_pump/vent_found - var/list/found_vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines) - if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20) - found_vents.Add(v) - if(found_vents.len) - vent_found = pick(found_vents) - host = new /mob/living/simple_mob/animal/passive/mouse(vent_found) - else - to_chat(src, "Unable to find any unwelded vents to spawn mice at.") - - if(host) - if(config.uneducated_mice) - host.universal_understand = 0 - announce_ghost_joinleave(src, 0, "They are now a mouse.") - host.ckey = src.ckey - host.add_ventcrawl(vent_found) - to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") - -/mob/observer/dead/verb/view_manfiest() - set name = "Show Crew Manifest" - set category = "Ghost" - - var/dat - dat += "

Crew Manifest

" - dat += data_core.get_manifest() - - src << browse(dat, "window=manifest;size=370x420;can_close=1") - -//This is called when a ghost is drag clicked to something. -/mob/observer/dead/MouseDrop(atom/over) - if(!usr || !over) return - if (isobserver(usr) && usr.client && usr.client.holder && isliving(over)) - if (usr.client.holder.cmd_ghost_drag(src,over)) - return - - return ..() - -//Used for drawing on walls with blood puddles as a spooky ghost. -/mob/observer/dead/verb/bloody_doodle() - - set category = "Ghost" - set name = "Write in blood" - set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." - - if(!(config.cult_ghostwriter)) - to_chat(src, "That verb is not currently permitted.") - return - - if (!src.stat) - return - - if (usr != src) - return 0 //something is terribly wrong - - var/ghosts_can_write - if(ticker.mode.name == "cult") - if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists) - ghosts_can_write = 1 - - if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such. - to_chat(src, "The veil is not thin enough for you to do that.") - return - - var/list/choices = list() - for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) - if(B.amount > 0) - choices += B - - if(!choices.len) - to_chat(src, "There is no blood to use nearby.") - return - - var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices) - - var/direction = tgui_input_list(src,"Which way?","Tile selection", list("Here","North","South","East","West")) - var/turf/simulated/T = src.loc - if (direction != "Here") - T = get_step(T,text2dir(direction)) - - if (!istype(T)) - to_chat(src, "You cannot doodle there.") - return - - if(!choice || choice.amount == 0 || !(src.Adjacent(choice))) - return - - var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808" - - var/num_doodles = 0 - for (var/obj/effect/decal/cleanable/blood/writing/W in T) - num_doodles++ - if (num_doodles > 4) - to_chat(src, "There is no space to write on!") - return - - var/max_length = 50 - - var/message = sanitize(input(usr, "Write a message. It cannot be longer than [max_length] characters.","Blood writing", "")) - - if (message) - - if (length(message) > max_length) - message += "-" - to_chat(src, "You ran out of blood to write with!") - - var/obj/effect/decal/cleanable/blood/writing/W = new(T) - W.basecolor = doodle_color - W.update_icon() - W.message = message - W.add_hiddenprint(src) - W.visible_message("Invisible fingers crudely paint something in blood on [T]...") - -/mob/observer/dead/pointed(atom/A as mob|obj|turf in view()) - if(!..()) - return 0 - usr.visible_message("[src] points to [A]") - return 1 - -/mob/observer/dead/proc/manifest(mob/user) - is_manifest = TRUE - verbs |= /mob/observer/dead/proc/toggle_visibility - verbs |= /mob/observer/dead/proc/ghost_whisper - to_chat(src, "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.") - if(plane != PLANE_WORLD) - user.visible_message( \ - "\The [user] drags ghost, [src], to our plane of reality!", \ - "You drag [src] to our plane of reality!" \ - ) - toggle_visibility(TRUE) - else - var/datum/gender/T = gender_datums[user.get_visible_gender()] - user.visible_message ( \ - "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \ - "You get the feeling that the ghost can't become any more visible." \ - ) - -/mob/observer/dead/proc/toggle_icon(var/icon) - if(!client) - return - - var/iconRemoved = 0 - for(var/image/I in client.images) - if(I.icon_state == icon) - iconRemoved = 1 - qdel(I) - - if(!iconRemoved) - var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon) - client.images += J - -/mob/observer/dead/proc/toggle_visibility(var/forced = 0) - set category = "Ghost" - set name = "Toggle Visibility" - set desc = "Allows you to turn (in)visible (almost) at will." - - var/toggled_invisible - if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600) - to_chat(src, "You must gather strength before you can turn visible again...") - return - - if(plane == PLANE_WORLD) - toggled_invisible = world.time - visible_message("It fades from sight...", "You are now invisible.") - else - to_chat(src, "You are now visible!") - - plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS - invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER - - // Give the ghost a cult icon which should be visible only to itself - toggle_icon("cult") - -/mob/observer/dead/verb/toggle_anonsay() - set category = "Ghost" - set name = "Toggle Anonymous Chat" - set desc = "Toggles showing your key in dead chat." - - src.anonsay = !src.anonsay - if(anonsay) - to_chat(src, "Your key won't be shown when you speak in dead chat.") - else - to_chat(src, "Your key will be publicly visible again.") - -/mob/observer/dead/canface() - return 1 - -/mob/observer/dead/proc/can_admin_interact() - return check_rights(R_ADMIN|R_EVENT, 0, src) - -/mob/observer/dead/verb/toggle_ghostsee() - set name = "Toggle Ghost Vision" - set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" - set category = "Ghost" - ghostvision = !ghostvision - updateghostsight() - to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.") - -/mob/observer/dead/verb/toggle_darkness() - set name = "Toggle Darkness" - set desc = "Toggles your ability to see lighting overlays, and the darkness they create." - set category = "Ghost" - seedarkness = !seedarkness - updateghostsight() - to_chat(src, "You [seedarkness ? "now" : "no longer"] see darkness.") - -/mob/observer/dead/proc/updateghostsight() - plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) //Inversion, because "not seeing" the darkness is "seeing" the lighting plane master. - plane_holder.set_vis(VIS_GHOSTS, ghostvision) - -/mob/observer/dead/MayRespawn(var/feedback = 0) - if(!client) - return 0 - if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse) - if(feedback) - to_chat(src, "Your non-dead body prevent you from respawning.") - return 0 - if(config.antag_hud_restricted && has_enabled_antagHUD == 1) - if(feedback) - to_chat(src, "antagHUD restrictions prevent you from respawning.") - return 0 - return 1 - -/atom/proc/extra_ghost_link() - return - -/mob/extra_ghost_link(var/atom/ghost) - if(client && eyeobj) - return "|eye" - -/mob/observer/dead/extra_ghost_link(var/atom/ghost) - if(mind && mind.current) - return "|body" - -/proc/ghost_follow_link(var/atom/target, var/atom/ghost) - if((!target) || (!ghost)) return - . = "follow" - . += target.extra_ghost_link(ghost) - -//Culted Ghosts - -/mob/observer/dead/proc/ghost_whisper() - set name = "Spectral Whisper" - set category = "IC" - - if(is_manifest) //Only able to whisper if it's hit with a tome. - var/list/options = list() - for(var/mob/living/Ms in view(src)) - options += Ms - var/mob/living/M = tgui_input_list(src, "Select who to whisper to:", "Whisper to?", options) - if(!M) - return 0 - var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null) - if(msg) - log_say("(SPECWHISP to [key_name(M)]): [msg]", src) - to_chat(M, " You hear a strange, unidentifiable voice in your head... [msg]") - to_chat(src, " You said: '[msg]' to [M].") - else - return - return 1 - else - to_chat(src, "You have not been pulled past the veil!") - -/mob/observer/dead/verb/choose_ghost_sprite() - set category = "Ghost" - set name = "Choose Sprite" - - var/choice - var/previous_state - var/finalized = "No" - - while(finalized == "No" && src.client) - choice = tgui_input_list(usr, "What would you like to use for your ghost sprite?", "Ghost Sprite", possible_ghost_sprites) - if(!choice) - return - - if(choice) - icon = 'icons/mob/ghost.dmi' - cut_overlays() - - if(icon_state && icon) - previous_state = icon_state - - icon_state = possible_ghost_sprites[choice] - finalized = tgui_alert(src, "Look at your sprite. Is this what you wish to use?","Ghost Sprite",list("No","Yes")) - - ghost_sprite = possible_ghost_sprites[choice] - - if(finalized == "No") - icon_state = previous_state - -/mob/observer/dead/is_blind() - return FALSE - -/mob/observer/dead/is_deaf() - return FALSE - -/mob/observer/dead/verb/paialert() - set category = "Ghost" - set name = "Blank pAI alert" - set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope." - - if(usr.client.prefs?.be_special & BE_PAI) - var/count = 0 - for(var/obj/item/device/paicard/p in all_pai_cards) - var/obj/item/device/paicard/PP = p - if(PP.pai == null) - count++ - PP.icon = 'icons/obj/pda_vr.dmi' // VOREStation Edit - PP.add_overlay("pai-ghostalert") - spawn(54) - PP.cut_overlays() - to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.") - else - to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.") - -/mob/observer/dead/speech_bubble_appearance() - return "ghost" - -// Lets a ghost know someone's trying to bring them back, and for them to get into their body. -// Mostly the same as TG's sans the hud element, since we don't have TG huds. -/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source) - if((last_revive_notification + 2 MINUTES) > world.time) - return - last_revive_notification = world.time - - if(flashwindow) - window_flash(client) - if(message) - to_chat(src, "[message]") - if(source) - throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source) - to_chat(src, "(Click to re-enter)") - if(sound) - SEND_SOUND(src, sound(sound)) - -/mob/observer/dead/verb/respawn() - set name = "Respawn" - set category = "Ghost" - src.abandon_mob() -======= -/mob/observer - name = "observer" - desc = "This shouldn't appear" - density = FALSE - vis_flags = NONE - -/mob/observer/dead - name = "ghost" - desc = "It's a g-g-g-g-ghooooost!" //jinkies! - icon = 'icons/mob/ghost.dmi' - icon_state = "ghost" - stat = DEAD - canmove = 0 - blinded = 0 - anchored = TRUE // don't get pushed around - - var/can_reenter_corpse - var/datum/hud/living/carbon/hud = null // hud - var/bootime = 0 - var/started_as_observer //This variable is set to 1 when you enter the game as an observer. - //If you died in the game and are a ghsot - this will remain as null. - //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. - var/has_enabled_antagHUD = 0 - var/medHUD = 0 - var/secHUD = 0 - var/antagHUD = 0 - universal_speak = 1 - var/atom/movable/following = null - var/admin_ghosted = 0 - var/anonsay = 0 - var/ghostvision = 1 //is the ghost able to see things humans can't? - incorporeal_move = 1 - - var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil. - var/ghost_sprite = null - var/global/list/possible_ghost_sprites = list( - "Clear" = "blank", - "Green Blob" = "otherthing", - "Bland" = "ghost", - "Robed-B" = "ghost1", - "Robed-BAlt" = "ghost2", - "King" = "ghostking", - "Shade" = "shade", - "Hecate" = "ghost-narsie", - "Glowing Statue" = "armour", - "Artificer" = "artificer", - "Behemoth" = "behemoth", - "Harvester" = "harvester", - "Wraith" = "wraith", - "Viscerator" = "viscerator", - "Corgi" = "corgi", - "Tamaskan" = "tamaskan", - "Black Cat" = "blackcat", - "Lizard" = "lizard", - "Goat" = "goat", - "Space Bear" = "bear", - "Bats" = "bat", - "Chicken" = "chicken_white", - "Parrot"= "parrot_fly", - "Goose" = "goose", - "Penguin" = "penguin", - "Brown Crab" = "crab", - "Gray Crab" = "evilcrab", - "Trout" = "trout-swim", - "Salmon" = "salmon-swim", - "Pike" = "pike-swim", - "Koi" = "koi-swim", - "Carp" = "carp", - "Red Robes" = "robe_red", - "Faithless" = "faithless", - "Shadowform" = "forgotten", - "Dark Ethereal" = "bloodguardian", - "Holy Ethereal" = "lightguardian", - "Red Elemental" = "magicRed", - "Blue Elemental" = "magicBlue", - "Pink Elemental" = "magicPink", - "Orange Elemental" = "magicOrange", - "Green Elemental" = "magicGreen", - "Daemon" = "daemon", - "Guard Spider" = "guard", - "Hunter Spider" = "hunter", - "Nurse Spider" = "nurse", - "Rogue Drone" = "drone", - "ED-209" = "ed209", - "Beepsky" = "secbot" - ) - var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners. - var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns - -/mob/observer/dead/New(mob/body) - - appearance = body - invisibility = INVISIBILITY_OBSERVER - layer = BELOW_MOB_LAYER - plane = PLANE_GHOSTS - alpha = 127 - - sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF - see_invisible = SEE_INVISIBLE_OBSERVER - see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but... - - var/turf/T - if(ismob(body)) - T = get_turf(body) //Where is the body located? - attack_log = body.attack_log //preserve our attack logs by copying them to our ghost - gender = body.gender - if(body.mind && body.mind.name) - name = body.mind.name - else - if(body.real_name) - name = body.real_name - else - if(gender == MALE) - name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - else - name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - - mind = body.mind //we don't transfer the mind but we keep a reference to it. - - // Fix for naked ghosts. - // Unclear why this isn't being grabbed by appearance. - if(ishuman(body)) - var/mob/living/carbon/human/H = body - add_overlay(H.overlays_standing) - - if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position - forceMove(T) - - if(!name) //To prevent nameless ghosts - name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - real_name = name - animate(src, pixel_y = 2, time = 10, loop = -1) - observer_mob_list += src - ..() - -/mob/observer/dead/Topic(href, href_list) - if (href_list["track"]) - var/mob/target = locate(href_list["track"]) in mob_list - if(target) - ManualFollow(target) - if(href_list["reenter"]) - reenter_corpse() - return - -/mob/observer/dead/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/weapon/book/tome)) - var/mob/observer/dead/M = src - M.manifest(user) - -/mob/observer/dead/CanPass(atom/movable/mover, turf/target) - return TRUE - -/mob/observer/dead/set_stat(var/new_stat) - if(new_stat != DEAD) - CRASH("It is best if observers stay dead, thank you.") - -/mob/observer/dead/examine_icon() - var/icon/I = get_cached_examine_icon(src) - if(!I) - I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE) - set_cached_examine_icon(src, I, 200 SECONDS) - return I - -/mob/observer/dead/examine(mob/user) - . = ..() - - if(is_admin(user)) - . += "\t>[ADMIN_FULLMONTY(src)]" - -/* -Transfer_mind is there to check if mob is being deleted/not going to have a body. -Works together with spawning an observer, noted above. -*/ - -/mob/observer/dead/Life() - ..() - if(!loc) return - if(!client) return 0 - - handle_regular_hud_updates() - handle_vision() - -/mob/proc/ghostize(var/can_reenter_corpse = 1) - if(key) - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.vr_holder && !can_reenter_corpse) - H.exit_vr() - return 0 - var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc. - ghost.can_reenter_corpse = can_reenter_corpse - ghost.timeofdeath = src.timeofdeath //BS12 EDIT - ghost.key = key - if(istype(loc, /obj/structure/morgue)) - var/obj/structure/morgue/M = loc - M.update() - else if(istype(loc, /obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = loc - B.update() - if(ghost.client) - ghost.client.time_died_as_mouse = ghost.timeofdeath - if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! - return ghost - -/* -This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. -*/ -/mob/living/verb/ghost() - set category = "OOC" - set name = "Ghost" - set desc = "Relinquish your life and enter the land of the dead." - - if(stat == DEAD && !forbid_seeing_deadchat) - announce_ghost_joinleave(ghostize(1)) - else - var/response - if(src.client && src.client.holder) - response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Ghost", "Admin Ghost", "Stay in body")) - if(response == "Admin Ghost") - if(!src.client) - return - src.client.admin_ghost() - else - response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Ghost", "Stay in body")) // VOREStation edit because we don't make players stay dead for 30 minutes. - if(response != "Ghost") - return - resting = 1 - var/turf/location = get_turf(src) - var/special_role = check_special_role() - if(!istype(loc,/obj/machinery/cryopod)) - log_and_message_admins("has ghosted outside cryo[special_role ? " as [special_role]" : ""]. (JMP)",usr) - else if(special_role) - log_and_message_admins("has ghosted in cryo as [special_role]. (JMP)",usr) - var/mob/observer/dead/ghost = ghostize(0) // 0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 - if(ghost) - ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. - ghost.set_respawn_timer() - announce_ghost_joinleave(ghost) - -/mob/observer/dead/can_use_hands() return 0 -/mob/observer/dead/is_active() return 0 - -/mob/observer/dead/Stat() - ..() - if(statpanel("Status")) - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - -/mob/observer/dead/verb/reenter_corpse() - set category = "Ghost" - set name = "Re-enter Corpse" - if(!client) return - if(!(mind && mind.current && can_reenter_corpse)) - to_chat(src, "You have no body.") - return - if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients - to_chat(usr, "Another consciousness is in your body... it is resisting you.") - return - //VOREStation Add - if(prevent_respawns.Find(mind.name)) - to_chat(usr, "You already quit this round as this character, sorry!") - return - //VOREStation Add End - if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). - var/found_rune - for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune - if(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) // Found an astral journey rune. - found_rune = 1 - break - if(!found_rune) - to_chat(usr, "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.") - return - mind.current.ajourn=0 - mind.current.key = key - mind.current.teleop = null - if(istype(mind.current.loc, /obj/structure/morgue)) - var/obj/structure/morgue/M = mind.current.loc - M.update(1) - else if(istype(mind.current.loc, /obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = mind.current.loc - B.update(1) - if(!admin_ghosted) - announce_ghost_joinleave(mind, 0, "They now occupy their body again.") - return 1 - -/mob/observer/dead/verb/toggle_medHUD() - set category = "Ghost" - set name = "Toggle MedicHUD" - set desc = "Toggles Medical HUD allowing you to see how everyone is doing" - - medHUD = !medHUD - plane_holder.set_vis(VIS_CH_HEALTH, medHUD) - plane_holder.set_vis(VIS_CH_STATUS_OOC, medHUD) - to_chat(src, "Medical HUD [medHUD ? "Enabled" : "Disabled"]") - -/mob/observer/dead/verb/toggle_secHUD() - set category = "Ghost" - set name = "Toggle Security HUD" - set desc = "Toggles Security HUD allowing you to see people's displayed ID's job, wanted status, etc" - - secHUD = !secHUD - plane_holder.set_vis(VIS_CH_ID, secHUD) - plane_holder.set_vis(VIS_CH_WANTED, secHUD) - plane_holder.set_vis(VIS_CH_IMPTRACK, secHUD) - plane_holder.set_vis(VIS_CH_IMPLOYAL, secHUD) - plane_holder.set_vis(VIS_CH_IMPCHEM, secHUD) - to_chat(src, "Security HUD [secHUD ? "Enabled" : "Disabled"]") - -/mob/observer/dead/verb/toggle_antagHUD() - set category = "Ghost" - set name = "Toggle AntagHUD" - set desc = "Toggles AntagHUD allowing you to see who is the antagonist" - - if(!config.antag_hud_allowed && !client.holder) - to_chat(src, "Admins have disabled this for this round.") - return - if(jobban_isbanned(src, "AntagHUD")) - to_chat(src, "You have been banned from using this feature") - return - if(config.antag_hud_restricted && !has_enabled_antagHUD && !client.holder) - var/response = tgui_alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?",list("Yes","No")) - if(response == "No") return - can_reenter_corpse = FALSE - set_respawn_timer(-1) // Foreeeever - if(!has_enabled_antagHUD && !client.holder) - has_enabled_antagHUD = TRUE - - antagHUD = !antagHUD - plane_holder.set_vis(VIS_CH_SPECIAL, antagHUD) - to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]") - -/mob/observer/dead/proc/jumpable_areas() - var/list/areas = return_sorted_areas() - if(client?.holder) - return areas - - for(var/key in areas) - var/area/A = areas[key] - if(A.z in using_map?.secret_levels) - areas -= key - - return areas - -/mob/observer/dead/proc/jumpable_mobs() - var/list/mobs = getmobs() - if(client?.holder) - return mobs - - for(var/key in mobs) - var/mobz = get_z(mobs[key]) - if(mobz in using_map?.secret_levels) - mobs -= key - - return mobs - -/mob/observer/dead/verb/dead_tele(areaname as null|anything in jumpable_areas()) - set name = "Teleport" - set category = "Ghost" - set desc = "Teleport to a location." - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - var/area/A - - if(!areaname) - var/list/areas = jumpable_areas() - var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas) - if(!input) - return - A = areas[input] - if(!A) - return - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname]))) - usr.on_mob_jump() - -/mob/observer/dead/verb/follow(mobname as null|anything in jumpable_mobs()) - set name = "Follow" - set category = "Ghost" - set desc = "Follow and haunt a mob." - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - var/mob/M - - if(!mobname) - var/list/possible_mobs = jumpable_mobs() - var/input = tgui_input_list(usr, "Select a mob:", "Ghost Follow", possible_mobs) - if(!input) - return - M = possible_mobs[input] - if(!M) - return - - if(!istype(usr, /mob/observer/dead)) - to_chat(usr, "Not when you're not dead!") - return - - ManualFollow(M || jumpable_mobs()[mobname]) - -/mob/observer/dead/forceMove(atom/destination) - if(client?.holder) - return ..() - - if(get_z(destination) in using_map?.secret_levels) - to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) - if(following) - stop_following() - return - - return ..() - -/mob/observer/dead/Move(atom/newloc, direct = 0, movetime) - if(client?.holder) - return ..() - - if(get_z(newloc) in using_map?.secret_levels) - to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts.")) - if(following) - stop_following() - return - - return ..() - -// This is the ghost's follow verb with an argument -/mob/observer/dead/proc/ManualFollow(var/atom/movable/target) - if(!target) - return - - var/turf/targetloc = get_turf(target) - if(check_holy(targetloc)) - to_chat(usr, "You cannot follow a mob standing on holy grounds!") - return - if(get_z(target) in using_map?.secret_levels) - to_chat(src, SPAN_WARNING("Sorry, that target is in an area that ghosts aren't allowed to go.")) - return - if(target != src) - if(following && following == target) - return - following = target - to_chat(src, "Now following [target]") - if(ismob(target)) - forceMove(get_turf(target)) - var/mob/M = target - M.following_mobs += src - else - spawn(0) - while(target && following == target && client) - var/turf/T = get_turf(target) - if(!T) - break - // To stop the ghost flickering. - if(loc != T) - forceMove(T) - sleep(15) - - var/icon/I = icon(target.icon,target.icon_state,target.dir) - - var/orbitsize = (I.Width()+I.Height())*0.5 - orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) - - var/rot_seg - - /* We don't have this pref yet - switch(ghost_orbit) - if(GHOST_ORBIT_TRIANGLE) - rot_seg = 3 - if(GHOST_ORBIT_SQUARE) - rot_seg = 4 - if(GHOST_ORBIT_PENTAGON) - rot_seg = 5 - if(GHOST_ORBIT_HEXAGON) - rot_seg = 6 - else //Circular - rot_seg = 36 //360/10 bby, smooth enough aproximation of a circle - */ - - orbit(target, orbitsize, FALSE, 20, rot_seg) - -/mob/observer/dead/orbit() - set_dir(2) //reset dir so the right directional sprites show up - return ..() - -/mob/observer/dead/stop_orbit() - . = ..() - //restart our floating animation after orbit is done. - pixel_y = 0 - pixel_x = 0 - transform = null - animate(src, pixel_y = 2, time = 10, loop = -1) - -/mob/observer/dead/proc/stop_following() - following = null - stop_orbit() - -/mob/proc/update_following() - . = get_turf(src) - for(var/mob/observer/dead/M in following_mobs) - if(!.) - M.stop_following() - - if(M.following != src) - following_mobs -= M - else - if(M.loc != .) - M.forceMove(.) - -/mob - var/list/following_mobs = list() - -/mob/Destroy() - for(var/mob/observer/dead/M in following_mobs) - M.stop_following() - following_mobs = null - return ..() - -/mob/observer/dead/Destroy() - if(ismob(following)) - var/mob/M = following - M.following_mobs -= src - stop_following() - observer_mob_list -= src - return ..() - -/mob/Moved(atom/old_loc, direction, forced = FALSE) - . = ..() - update_following() - -/mob/Life() - // to catch teleports etc which directly set loc - update_following() - return ..() - -/mob/proc/check_holy(var/turf/T) - return 0 - -/mob/observer/dead/check_holy(var/turf/T) - if(check_rights(R_ADMIN|R_FUN|R_EVENT, 0, src)) - return 0 - - return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists)) - -/mob/observer/dead/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak - set category = "Ghost" - set name = "Jump to Mob" - set desc = "Teleport to a mob" - set popup_menu = FALSE - - if(!istype(usr, /mob/observer/dead)) //Make sure they're an observer! - return - - var/list/possible_mobs = jumpable_mobs() - var/input = tgui_input_list(usr, "Select a mob:", "Ghost Jump", possible_mobs) - if(!input) - return - - var/target = possible_mobs[input] - if (!target)//Make sure we actually have a target - return - else - var/mob/M = target //Destination mob - var/turf/T = get_turf(M) //Turf of the destination mob - - if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. - forceMove(T) - stop_following() - else - to_chat(src, "This mob is not located in the game world.") - -/mob/observer/dead/memory() - set hidden = 1 - to_chat(src, "You are dead! You have no mind to store memory!") - -/mob/observer/dead/add_memory() - set hidden = 1 - to_chat(src, "You are dead! You have no mind to store memory!") - -/mob/observer/dead/Post_Incorpmove() - stop_following() - -/mob/observer/dead/verb/analyze_air() - set name = "Analyze Air" - set category = "Ghost" - - if(!istype(usr, /mob/observer/dead)) return - - // Shamelessly copied from the Gas Analyzers - if (!( istype(usr.loc, /turf) )) - return - - var/datum/gas_mixture/environment = usr.loc.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles - - to_chat(src, "Results:") - if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(src, "Pressure: [round(pressure,0.1)] kPa") - else - to_chat(src, "Pressure: [round(pressure,0.1)] kPa") - if(total_moles) - for(var/g in environment.gas) - to_chat(src, "[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)") - to_chat(src, "Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)") - to_chat(src, "Heat Capacity: [round(environment.heat_capacity(),0.1)]") - -/mob/observer/dead/verb/check_radiation() - set name = "Check Radiation" - set category = "Ghost" - - var/turf/t = get_turf(src) - if(t) - var/rads = SSradiation.get_rads_at_turf(t) - to_chat(src, "Radiation level: [rads ? rads : "0"] Bq.") - - -/mob/observer/dead/verb/become_mouse() - set name = "Become mouse" - set category = "Ghost" - - if(config.disable_player_mice) - to_chat(src, "Spawning as a mouse is currently disabled.") - return - - if(!MayRespawn(1)) - return - - var/turf/T = get_turf(src) - if(!T || (T.z in using_map.admin_levels)) - to_chat(src, "You may not spawn as a mouse on this Z-level.") - return - - var/timedifference = world.time - client.time_died_as_mouse - if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600) - var/timedifference_text - timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss") - to_chat(src, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.") - return - - var/response = tgui_alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!")) - if(response != "Squeek!") return //Hit the wrong key...again. - - - //find a viable mouse candidate - var/mob/living/simple_mob/animal/passive/mouse/host - var/obj/machinery/atmospherics/unary/vent_pump/vent_found - var/list/found_vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines) - if(!v.welded && v.z == T.z && v.network && v.network.normal_members.len > 20) - found_vents.Add(v) - if(found_vents.len) - vent_found = pick(found_vents) - host = new /mob/living/simple_mob/animal/passive/mouse(vent_found) - else - to_chat(src, "Unable to find any unwelded vents to spawn mice at.") - - if(host) - if(config.uneducated_mice) - host.universal_understand = 0 - announce_ghost_joinleave(src, 0, "They are now a mouse.") - host.ckey = src.ckey - host.add_ventcrawl(vent_found) - to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") - -/mob/observer/dead/verb/view_manfiest() - set name = "Show Crew Manifest" - set category = "Ghost" - - var/dat - dat += "

Crew Manifest

" - dat += data_core.get_manifest() - - src << browse(dat, "window=manifest;size=370x420;can_close=1") - -//This is called when a ghost is drag clicked to something. -/mob/observer/dead/MouseDrop(atom/over) - if(!usr || !over) return - if (isobserver(usr) && usr.client && usr.client.holder && isliving(over)) - if (usr.client.holder.cmd_ghost_drag(src,over)) - return - - return ..() - -//Used for drawing on walls with blood puddles as a spooky ghost. -/mob/observer/dead/verb/bloody_doodle() - - set category = "Ghost" - set name = "Write in blood" - set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." - - if(!(config.cult_ghostwriter)) - to_chat(src, "That verb is not currently permitted.") - return - - if (!src.stat) - return - - if (usr != src) - return 0 //something is terribly wrong - - var/ghosts_can_write - if(ticker.mode.name == "cult") - if(cult.current_antagonists.len > config.cult_ghostwriter_req_cultists) - ghosts_can_write = 1 - - if(!ghosts_can_write && !check_rights(R_ADMIN|R_EVENT|R_FUN, 0)) //Let's allow for admins to write in blood for events and the such. - to_chat(src, "The veil is not thin enough for you to do that.") - return - - var/list/choices = list() - for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) - if(B.amount > 0) - choices += B - - if(!choices.len) - to_chat(src, "There is no blood to use nearby.") - return - - var/obj/effect/decal/cleanable/blood/choice = tgui_input_list(src, "What blood would you like to use?", "Blood Choice", choices) - - var/direction = tgui_input_list(src,"Which way?","Tile selection", list("Here","North","South","East","West")) - var/turf/simulated/T = src.loc - if (direction != "Here") - T = get_step(T,text2dir(direction)) - - if (!istype(T)) - to_chat(src, "You cannot doodle there.") - return - - if(!choice || choice.amount == 0 || !(src.Adjacent(choice))) - return - - var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808" - - var/num_doodles = 0 - for (var/obj/effect/decal/cleanable/blood/writing/W in T) - num_doodles++ - if (num_doodles > 4) - to_chat(src, "There is no space to write on!") - return - - var/max_length = 50 - - var/message = sanitize(input(usr, "Write a message. It cannot be longer than [max_length] characters.","Blood writing", "")) - - if (message) - - if (length(message) > max_length) - message += "-" - to_chat(src, "You ran out of blood to write with!") - - var/obj/effect/decal/cleanable/blood/writing/W = new(T) - W.basecolor = doodle_color - W.update_icon() - W.message = message - W.add_hiddenprint(src) - W.visible_message("Invisible fingers crudely paint something in blood on [T]...") - -/mob/observer/dead/pointed(atom/A as mob|obj|turf in view()) - if(!..()) - return 0 - usr.visible_message("[src] points to [A]") - return 1 - -/mob/observer/dead/proc/manifest(mob/user) - is_manifest = TRUE - verbs |= /mob/observer/dead/proc/toggle_visibility - verbs |= /mob/observer/dead/proc/ghost_whisper - to_chat(src, "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab.") - if(plane != PLANE_WORLD) - user.visible_message( \ - "\The [user] drags ghost, [src], to our plane of reality!", \ - "You drag [src] to our plane of reality!" \ - ) - toggle_visibility(TRUE) - else - var/datum/gender/T = gender_datums[user.get_visible_gender()] - user.visible_message ( \ - "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \ - "You get the feeling that the ghost can't become any more visible." \ - ) - -/mob/observer/dead/proc/toggle_icon(var/icon) - if(!client) - return - - var/iconRemoved = 0 - for(var/image/I in client.images) - if(I.icon_state == icon) - iconRemoved = 1 - qdel(I) - - if(!iconRemoved) - var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon) - client.images += J - -/mob/observer/dead/proc/toggle_visibility(var/forced = 0) - set category = "Ghost" - set name = "Toggle Visibility" - set desc = "Allows you to turn (in)visible (almost) at will." - - var/toggled_invisible - if(!forced && plane == PLANE_GHOSTS && world.time < toggled_invisible + 600) - to_chat(src, "You must gather strength before you can turn visible again...") - return - - if(plane == PLANE_WORLD) - toggled_invisible = world.time - visible_message("It fades from sight...", "You are now invisible.") - else - to_chat(src, "You are now visible!") - - plane = (plane == PLANE_GHOSTS) ? PLANE_WORLD : PLANE_GHOSTS - invisibility = (plane == PLANE_WORLD) ? 0 : INVISIBILITY_OBSERVER - - // Give the ghost a cult icon which should be visible only to itself - toggle_icon("cult") - -/mob/observer/dead/verb/toggle_anonsay() - set category = "Ghost" - set name = "Toggle Anonymous Chat" - set desc = "Toggles showing your key in dead chat." - - src.anonsay = !src.anonsay - if(anonsay) - to_chat(src, "Your key won't be shown when you speak in dead chat.") - else - to_chat(src, "Your key will be publicly visible again.") - -/mob/observer/dead/canface() - return 1 - -/mob/observer/dead/proc/can_admin_interact() - return check_rights(R_ADMIN|R_EVENT, 0, src) - -/mob/observer/dead/verb/toggle_ghostsee() - set name = "Toggle Ghost Vision" - set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" - set category = "Ghost" - ghostvision = !ghostvision - updateghostsight() - to_chat(src, "You [ghostvision ? "now" : "no longer"] have ghost vision.") - -/mob/observer/dead/verb/toggle_darkness() - set name = "Toggle Darkness" - set desc = "Toggles your ability to see lighting overlays, and the darkness they create." - set category = "Ghost" - seedarkness = !seedarkness - updateghostsight() - to_chat(src, "You [seedarkness ? "now" : "no longer"] see darkness.") - -/mob/observer/dead/proc/updateghostsight() - plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness) //Inversion, because "not seeing" the darkness is "seeing" the lighting plane master. - plane_holder.set_vis(VIS_GHOSTS, ghostvision) - -/mob/observer/dead/MayRespawn(var/feedback = 0) - if(!client) - return 0 - if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse) - if(feedback) - to_chat(src, "Your non-dead body prevent you from respawning.") - return 0 - if(config.antag_hud_restricted && has_enabled_antagHUD == 1) - if(feedback) - to_chat(src, "antagHUD restrictions prevent you from respawning.") - return 0 - return 1 - -/atom/proc/extra_ghost_link() - return - -/mob/extra_ghost_link(var/atom/ghost) - if(client && eyeobj) - return "|eye" - -/mob/observer/dead/extra_ghost_link(var/atom/ghost) - if(mind && mind.current) - return "|body" - -/proc/ghost_follow_link(var/atom/target, var/atom/ghost) - if((!target) || (!ghost)) return - . = "follow" - . += target.extra_ghost_link(ghost) - -//Culted Ghosts - -/mob/observer/dead/proc/ghost_whisper() - set name = "Spectral Whisper" - set category = "IC" - - if(is_manifest) //Only able to whisper if it's hit with a tome. - var/list/options = list() - for(var/mob/living/Ms in view(src)) - options += Ms - var/mob/living/M = tgui_input_list(src, "Select who to whisper to:", "Whisper to?", options) - if(!M) - return 0 - var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null) - if(msg) - log_say("(SPECWHISP to [key_name(M)]): [msg]", src) - to_chat(M, " You hear a strange, unidentifiable voice in your head... [msg]") - to_chat(src, " You said: '[msg]' to [M].") - else - return - return 1 - else - to_chat(src, "You have not been pulled past the veil!") - -/mob/observer/dead/verb/choose_ghost_sprite() - set category = "Ghost" - set name = "Choose Sprite" - - var/choice - var/previous_state - var/finalized = "No" - - while(finalized == "No" && src.client) - choice = tgui_input_list(usr, "What would you like to use for your ghost sprite?", "Ghost Sprite", possible_ghost_sprites) - if(!choice) - return - - if(choice) - icon = 'icons/mob/ghost.dmi' - cut_overlays() - - if(icon_state && icon) - previous_state = icon_state - - icon_state = possible_ghost_sprites[choice] - finalized = tgui_alert(src, "Look at your sprite. Is this what you wish to use?","Ghost Sprite",list("No","Yes")) - - ghost_sprite = possible_ghost_sprites[choice] - - if(finalized == "No") - icon_state = previous_state - -/mob/observer/dead/is_blind() - return FALSE - -/mob/observer/dead/is_deaf() - return FALSE - -/mob/observer/dead/verb/paialert() - set category = "Ghost" - set name = "Blank pAI alert" - set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope." - - if(usr.client.prefs?.be_special & BE_PAI) - var/count = 0 - for(var/obj/item/device/paicard/p in all_pai_cards) - var/obj/item/device/paicard/PP = p - if(PP.pai == null) - count++ - PP.icon = 'icons/obj/pda_vr.dmi' // VOREStation Edit - PP.add_overlay("pai-ghostalert") - spawn(54) - PP.cut_overlays() - to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.") - else - to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.") - -/mob/observer/dead/speech_bubble_appearance() - return "ghost" - -// Lets a ghost know someone's trying to bring them back, and for them to get into their body. -// Mostly the same as TG's sans the hud element, since we don't have TG huds. -/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source) - if((last_revive_notification + 2 MINUTES) > world.time) - return - last_revive_notification = world.time - - if(flashwindow) - window_flash(client) - if(message) - to_chat(src, "[message]") - if(source) - throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning, new_master = source) - to_chat(src, "(Click to re-enter)") - if(sound) - SEND_SOUND(src, sound(sound)) - -/mob/observer/dead/verb/respawn() - set name = "Respawn" - set category = "Ghost" - src.abandon_mob() ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) From dff550747b57bcc12272556deb8c72d10291c4f2 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:28:44 -0400 Subject: [PATCH 15/17] powder that makes you say yes --- code/modules/mob/living/carbon/human/unarmed_attack.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index 7fbdfd590b..fff19eef7e 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -281,13 +281,5 @@ var/global/list/sparring_attack_cache = list() damage_type = AGONY shredding = 0 damage = 0 -<<<<<<< HEAD - sharp = 0 - edge = 0 -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) - sharp = 0 - edge = 0 -======= sharp = FALSE edge = FALSE ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) From f4ffa9f8be6369b7bbbd475336572632597e44f5 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:30:48 -0400 Subject: [PATCH 16/17] powder that makes you say yes --- code/modules/mob/mob.dm | 2474 +-------------------------------------- 1 file changed, 1 insertion(+), 2473 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index eb8e5acabe..af947a7b6e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,4 +1,3 @@ -<<<<<<< HEAD /mob/Destroy()//This makes sure that mobs withGLOB.clients/keys are not just deleted from the game. mob_list -= src dead_mob_list -= src @@ -946,7 +945,7 @@ if(O == selection) pinned -= O if(!pinned.len) - anchored = 0 + anchored = FALSE return 1 //Check for brain worms in head. @@ -1233,2474 +1232,3 @@ GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list) /mob/proc/grab_ghost(force) if(mind) return mind.grab_ghost(force = force) -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) -/mob/Destroy()//This makes sure that mobs withGLOB.clients/keys are not just deleted from the game. - mob_list -= src - dead_mob_list -= src - living_mob_list -= src - unset_machine() - qdel(hud_used) - clear_fullscreen() - if(client) - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - qdel(spell_master) - remove_screen_obj_references() - client.screen = list() - if(mind && mind.current == src) - spellremove(src) - ghostize() - QDEL_NULL(plane_holder) - ..() - return QDEL_HINT_HARDDEL_NOW - -/mob/proc/remove_screen_obj_references() - hands = null - pullin = null - purged = null - internals = null - i_select = null - m_select = null - healths = null - throw_icon = null - pain = null - item_use_icon = null - gun_move_icon = null - gun_setting_icon = null - spell_masters = null - zone_sel = null - -/mob/Initialize() - mob_list += src - if(stat == DEAD) - dead_mob_list += src - else - living_mob_list += src - lastarea = get_area(src) - set_focus(src) // VOREStation Add - Key Handling - hook_vr("mob_new",list(src)) //VOREStation Code - update_transform() // Some mobs may start bigger or smaller than normal. - return ..() - -/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - - if(!client && !teleop) return - - if (type) - if((type & VISIBLE_MESSAGE) && (is_blind() || paralysis) )//Vision related - if (!( alt )) - return - else - msg = alt - type = alt_type - if ((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related - if (!( alt )) - return - else - msg = alt - type = alt_type - if ((type & VISIBLE_MESSAGE) && (sdisabilities & BLIND)) - return - // Added voice muffling for Issue 41. - if(stat == UNCONSCIOUS || sleeping > 0) - to_chat(src, "... You can almost hear someone talking ...") - else - to_chat(src,msg) - if(teleop) - to_chat(teleop, create_text_tag("body", "BODY:", teleop) + "[msg]") - return - -// Show a message to all mobs and objects in sight of this one -// This would be for visible actions by the src mob -// message is the message output to anyone who can see e.g. "[src] does something!" -// self_message (optional) is what the src mob sees e.g. "You do something!" -// blind_message (optional) is what blind people will hear e.g. "You hear something!" -/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null, var/range = world.view, var/runemessage) - if(self_message) - if(LAZYLEN(exclude_mobs)) - exclude_mobs |= src - else - exclude_mobs = list(src) - src.show_message(self_message, 1, blind_message, 2) - if(isnull(runemessage)) - runemessage = -1 - . = ..(message, blind_message, exclude_mobs, range, runemessage) // Really not ideal that atom/visible_message has different arg numbering :( - -// Returns an amount of power drawn from the object (-1 if it's not viable). -// If drain_check is set it will not actually drain power, just return a value. -// If surge is set, it will destroy/damage the recipient and not return any power. -// Not sure where to define this, so it can sit here for the rest of time. -/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0) - return -1 - -// Show a message to all mobs and objects in earshot of this one -// This would be for audible actions by the src mob -// message is the message output to anyone who can hear. -// self_message (optional) is what the src mob hears. -// deaf_message (optional) is what deaf people will see. -// hearing_distance (optional) is the range, how many tiles away the message can be heard. -/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message, var/radio_message, var/runemessage) - - var/range = hearing_distance || world.view - var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE) - - var/list/hearing_mobs = hear["mobs"] - var/list/hearing_objs = hear["objs"] - - if(isnull(runemessage)) - runemessage = -1 // Symmetry with mob/audible_message, despite the fact this one doesn't call parent. Maybe it should! - - if(radio_message) - for(var/obj in hearing_objs) - var/obj/O = obj - O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null) - else - for(var/obj in hearing_objs) - var/obj/O = obj - O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - - for(var/mob in hearing_mobs) - var/mob/M = mob - var/msg = message - if(self_message && M==src) - msg = self_message - M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - if(runemessage != -1) - M.create_chat_message(src, "[runemessage || message]", FALSE, list("emote"), audible = FALSE) - -/mob/proc/findname(msg) - for(var/mob/M in mob_list) - if (M.real_name == text("[]", msg)) - return M - return 0 - -/mob/proc/Life() -// if(organStructure) -// organStructure.ProcessOrgans() - return - -#define UNBUCKLED 0 -#define PARTIALLY_BUCKLED 1 -#define FULLY_BUCKLED 2 -/mob/proc/buckled() - // Preliminary work for a future buckle rewrite, - // where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting) - if(!buckled) - return UNBUCKLED - return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED - -/mob/proc/is_blind() - return ((sdisabilities & BLIND) || blinded || incapacitated(INCAPACITATION_KNOCKOUT)) - -/mob/proc/is_deaf() - return ((sdisabilities & DEAF) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT)) - -/mob/proc/is_physically_disabled() - return incapacitated(INCAPACITATION_DISABLED) - -/mob/proc/cannot_stand() - return incapacitated(INCAPACITATION_KNOCKDOWN) - -/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) - if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned) - return 1 - - if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting)) - return 1 - - if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH))) - return 1 - - if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained()) - return 1 - - if((incapacitation_flags & (INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY))) - var/buckling = buckled() - if(buckling >= PARTIALLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_PARTIALLY)) - return 1 - if(buckling == FULLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_FULLY)) - return 1 - - return 0 - -#undef UNBUCKLED -#undef PARTIALLY_BUCKLED -#undef FULLY_BUCKLED - -/mob/proc/restrained() - return - -/mob/proc/reset_view(atom/A) - if (client) - if (istype(A, /atom/movable)) - client.perspective = EYE_PERSPECTIVE - client.eye = A - else - if (isturf(loc)) - client.eye = client.mob - client.perspective = MOB_PERSPECTIVE - else - client.perspective = EYE_PERSPECTIVE - client.eye = loc - return TRUE - -/mob/verb/pointed(atom/A as mob|obj|turf in view()) - set name = "Point To" - set category = "Object" - - if(!src || !isturf(src.loc) || !(A in view(src.loc))) - return 0 - if(istype(A, /obj/effect/decal/point)) - return 0 - - var/turf/tile = get_turf(A) - if (!tile) - return 0 - - var/turf/our_tile = get_turf(src) - var/obj/visual = new /obj/effect/decal/point(our_tile) - visual.invisibility = invisibility - visual.plane = ABOVE_PLANE - visual.layer = FLY_LAYER - - animate(visual, - pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, - pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, - time = 1.7, - easing = EASE_OUT) - - QDEL_IN(visual, 2 SECONDS) //Better qdel - - face_atom(A) - return 1 - - -/mob/proc/ret_grab(list/L, flag) - return - -/mob/verb/mode() - set name = "Activate Held Object" - set category = "Object" - set src = usr - - return - -/* -/mob/verb/dump_source() - - var/master = "
"
-	for(var/t in typesof(/area))
-		master += text("[]\n", t)
-		//Foreach goto(26)
-	src << browse(master)
-	return
-*/
-
-/mob/verb/memory()
-	set name = "Notes"
-	set category = "IC"
-	if(mind)
-		mind.show_memory(src)
-	else
-		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
-
-/mob/verb/add_memory(msg as message)
-	set name = "Add Note"
-	set category = "IC"
-
-	msg = sanitize(msg)
-
-	if(mind)
-		mind.store_memory(msg)
-	else
-		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
-
-/mob/proc/store_memory(msg as message, popup, sane = 1)
-	msg = copytext(msg, 1, MAX_MESSAGE_LEN)
-
-	if (sane)
-		msg = sanitize(msg)
-
-	if (length(memory) == 0)
-		memory += msg
-	else
-		memory += "
[msg]" - - if (popup) - memory() - -/mob/proc/update_flavor_text() - set src in usr - if(usr != src) - to_chat(usr, "No.") - var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb.","Flavor Text",html_decode(flavor_text)) as message|null, extra = 0) //VOREStation Edit: separating out OOC notes - - if(msg != null) - flavor_text = msg - -/mob/proc/warn_flavor_changed() - if(flavor_text && flavor_text != "") // don't spam people that don't use it! - to_chat(src, "

OOC Warning:

") - to_chat(src, "Your flavor text is likely out of date! Change") - -/mob/proc/print_flavor_text() - if (flavor_text && flavor_text != "") - var/msg = replacetext(flavor_text, "\n", " ") - if(length(msg) <= 40) - return "[msg]" - else - return "[copytext_preserve_html(msg, 1, 37)]... More..." - -/* -/mob/verb/help() - set name = "Help" - src << browse('html/help.html', "window=help") - return -*/ - -/mob/proc/set_respawn_timer(var/time) - // Try to figure out what time to use - - // Special cases, can never respawn - if(ticker?.mode?.deny_respawn) - time = -1 - else if(!config.abandon_allowed) - time = -1 - else if(!config.respawn) - time = -1 - - // Special case for observing before game start - else if(ticker?.current_state <= GAME_STATE_SETTING_UP) - time = 1 MINUTE - - // Wasn't given a time, use the config time - else if(!time) - time = config.respawn_time - - var/keytouse = ckey - // Try harder to find a key to use - if(!keytouse && key) - keytouse = ckey(key) - else if(!keytouse && mind?.key) - keytouse = ckey(mind.key) - - GLOB.respawn_timers[keytouse] = world.time + time - -/mob/observer/dead/set_respawn_timer() - if(config.antag_hud_restricted && has_enabled_antagHUD) - ..(-1) - else - return // Don't set it, no need - -/mob/verb/abandon_mob() - set name = "Return to Menu" - set category = "OOC" - - if(stat != DEAD || !ticker) - to_chat(usr, "You must be dead to use this!") - return - - // Final chance to abort "respawning" - if(mind && timeofdeath) // They had spawned before - var/choice = tgui_alert(usr, "Returning to the menu will prevent your character from being revived in-round. Are you sure?", "Confirmation", list("No, wait", "Yes, leave")) - if(choice == "No, wait") - return - - // Beyond this point, you're going to respawn - to_chat(usr, config.respawn_message) - - if(!client) - log_game("[usr.key] AM failed due to disconnect.") - return - client.screen.Cut() - client.screen += client.void - if(!client) - log_game("[usr.key] AM failed due to disconnect.") - return - - announce_ghost_joinleave(client, 0) - - var/mob/new_player/M = new /mob/new_player() - if(!client) - log_game("[usr.key] AM failed due to disconnect.") - qdel(M) - return - - M.key = key - if(M.mind) - M.mind.reset() - return - -/client/verb/changes() - set name = "Changelog" - set category = "OOC" - src << browse('html/changelog.html', "window=changes;size=675x650") - if(prefs.lastchangelog != changelog_hash) - prefs.lastchangelog = changelog_hash - SScharacter_setup.queue_preferences_save(prefs) - winset(src, "rpane.changelog", "background-color=none;font-style=;") - -/mob/verb/observe() - set name = "Observe" - set category = "OOC" - var/is_admin = 0 - - if(client.holder && (client.holder.rights & R_ADMIN|R_EVENT)) - is_admin = 1 - else if(stat != DEAD || istype(src, /mob/new_player)) - to_chat(usr, "You must be observing to use this!") - return - - if(is_admin && stat == DEAD) - is_admin = 0 - - var/list/targets = list() - - - targets += observe_list_format(nuke_disks) - targets += observe_list_format(all_singularities) - targets += getmobs() - targets += observe_list_format(sortAtom(mechas_list)) - targets += observe_list_format(SSshuttles.ships) - - client.perspective = EYE_PERSPECTIVE - - var/eye_name = null - - var/ok = "[is_admin ? "Admin Observe" : "Observe"]" - eye_name = tgui_input_list(usr, "Select something to [ok]:", "Select Target", targets) - - if (!eye_name) - return - - var/mob/mob_eye = targets[eye_name] - - if(client && mob_eye) - client.eye = mob_eye - if (is_admin) - client.adminobs = 1 - if(mob_eye == client.mob || client.eye == client.mob) - client.adminobs = 0 - -/mob/verb/cancel_camera() - set name = "Cancel Camera View" - set category = "OOC" - unset_machine() - reset_view(null) - -/mob/Topic(href, href_list) - if(href_list["mach_close"]) - var/t1 = text("window=[href_list["mach_close"]]") - unset_machine() - src << browse(null, t1) - - if(href_list["flavor_more"]) - usr << browse(text("[][]", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name)) - onclose(usr, "[name]") - if(href_list["flavor_change"]) - update_flavor_text() -// ..() - return - - -/mob/proc/pull_damage() - return 0 - -/mob/verb/stop_pulling() - - set name = "Stop Pulling" - set category = "IC" - - if(pulling) - if(ishuman(pulling)) - var/mob/living/carbon/human/H = pulling - visible_message(SPAN_WARNING("\The [src] lets go of \the [H]."), SPAN_NOTICE("You let go of \the [H]."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] lets go of you.")) - pulling.pulledby = null - pulling = null - if(pullin) - pullin.icon_state = "pull0" - -/mob/proc/start_pulling(var/atom/movable/AM) - - if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! - return - - if (AM.anchored) - to_chat(src, "It won't budge!") - return - - var/mob/M = AM - if(ismob(AM)) - - if(!can_pull_mobs || !can_pull_size) - to_chat(src, "They won't budge!") - return - - if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) - to_chat(src, "[M] is too large for you to move!") - return - - if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) - to_chat(src, "[M] is too heavy for you to move!") - return - - // If your size is larger than theirs and you have some - // kind of mob pull value AT ALL, you will be able to pull - // them, so don't bother checking that explicitly. - - if(M.grabbed_by.len) - // Only start pulling when nobody else has a grab on them - . = 1 - for(var/obj/item/weapon/grab/G in M.grabbed_by) - if(G.assailant != usr) - . = 0 - else - qdel(G) - if(!.) - to_chat(src, "Somebody has a grip on them!") - return - - if(!iscarbon(src)) - M.LAssailant = null - else - M.LAssailant = usr - - else if(isobj(AM)) - var/obj/I = AM - if(!can_pull_size || can_pull_size < I.w_class) - to_chat(src, "It won't budge!") - return - - if(pulling) - var/pulling_old = pulling - stop_pulling() - // Are we pulling the same thing twice? Just stop pulling. - if(pulling_old == AM) - return - - src.pulling = AM - AM.pulledby = src - - if(pullin) - pullin.icon_state = "pull1" - - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(H.lying) // If they're on the ground we're probably dragging their arms to move them - visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s arms."), SPAN_NOTICE("You lean down and grip \the [H]'s arms."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] leans down and grips your arms.")) - else //Otherwise we're probably just holding their arm to lead them somewhere - visible_message(SPAN_WARNING("\The [src] grips \the [H]'s arm."), SPAN_NOTICE("You grip \the [H]'s arm."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] grips your arm.")) - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback - - if(H.pull_damage()) - to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.") - - //Attempted fix for people flying away through space when cuffed and dragged. - if(ismob(AM)) - var/mob/pulled = AM - pulled.inertia_dir = 0 - -/mob/proc/can_use_hands() - return - -/mob/proc/is_active() - return (0 >= usr.stat) - -/mob/proc/is_dead() - return stat == DEAD - -/mob/proc/is_mechanical() - if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI")) - return 1 - return istype(src, /mob/living/silicon) || get_species() == "Machine" - -/mob/proc/is_ready() - return client && !!mind - -/mob/proc/get_gender() - return gender - -/mob/proc/see(message) - if(!is_active()) - return 0 - to_chat(src,message) - return 1 - -/mob/proc/show_viewers(message) - for(var/mob/M in viewers()) - M.see(message) - -/mob/Stat() - ..() - . = (is_client_active(10 MINUTES)) - - if(.) - if(statpanel("Status")) - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - if(ticker && ticker.current_state != GAME_STATE_PREGAME) - stat("Station Time", stationtime2text()) - stat("Station Date", stationdate2text()) - stat("Round Duration", roundduration2text()) - - if(client.holder) - if(statpanel("Status")) - stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - stat("Keys Held", keys2text(client.move_keys_held | client.mod_keys_held)) - stat("Next Move ADD", dirs2text(client.next_move_dir_add)) - stat("Next Move SUB", dirs2text(client.next_move_dir_sub)) - - if(statpanel("MC")) - stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat("World Time:", world.time) - stat("Real time of day:", REALTIMEOFDAY) - stat(null) - if(GLOB) - GLOB.stat_entry() - else - stat("Globals:", "ERROR") - if(Master) - Master.stat_entry() - else - stat("Master Controller:", "ERROR") - if(Failsafe) - Failsafe.stat_entry() - else - stat("Failsafe Controller:", "ERROR") - if(Master) - stat(null) - for(var/datum/controller/subsystem/SS in Master.subsystems) - SS.stat_entry() - - if(statpanel("Tickets")) - GLOB.ahelp_tickets.stat_entry() - - - if(length(GLOB.sdql2_queries)) - if(statpanel("SDQL2")) - stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) - for(var/i in GLOB.sdql2_queries) - var/datum/SDQL2_query/Q = i - Q.generate_stat() - - if(listed_turf && client) - if(!TurfAdjacent(listed_turf)) - listed_turf = null - else - if(statpanel("Turf")) - stat(listed_turf) - for(var/atom/A in listed_turf) - if(!A.mouse_opacity) - continue - if(A.invisibility > see_invisible) - continue - if(is_type_in_list(A, shouldnt_see)) - continue - if(A.plane > plane) - continue - stat(A) - - -// facing verbs -/mob/proc/canface() -// if(!canmove) return 0 //VOREStation Edit. Redundant check that only affects conscious proning, actual inability to turn and shift around handled by actual inabilities. - if(stat) return 0 - if(anchored) return 0 - if(transforming) return 0 - return 1 - -// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet. -/mob/proc/can_stand_overridden() - return 0 - -//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. -/mob/proc/update_canmove() - return canmove - - -/mob/proc/facedir(var/ndir) - if(!canface() || (client && (client.moving || !checkMoveCooldown()))) - DEBUG_INPUT("Denying Facedir for [src] (moving=[client?.moving])") - return 0 - set_dir(ndir) - if(buckled && buckled.buckle_movable) - buckled.set_dir(ndir) - setMoveCooldown(movement_delay()) - return 1 - - -/mob/verb/eastface() - set hidden = 1 - return facedir(client.client_dir(EAST)) - - -/mob/verb/westface() - set hidden = 1 - return facedir(client.client_dir(WEST)) - - -/mob/verb/northface() - set hidden = 1 - return facedir(client.client_dir(NORTH)) - - -/mob/verb/southface() - set hidden = 1 - return facedir(client.client_dir(SOUTH)) - - -//This might need a rename but it should replace the can this mob use things check -/mob/proc/IsAdvancedToolUser() - return 0 - -/mob/proc/Stun(amount) - if(status_flags & CANSTUN) - facing_dir = null - stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" - if(status_flags & CANSTUN) - stunned = max(amount,0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/AdjustStunned(amount) - if(status_flags & CANSTUN) - stunned = max(stunned + amount,0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/Weaken(amount) - if(status_flags & CANWEAKEN) - facing_dir = null - weakened = max(max(weakened,amount),0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/SetWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(amount,0) - update_canmove() //can you guess what this does yet? - return - -/mob/proc/AdjustWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(weakened + amount,0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/Paralyse(amount) - if(status_flags & CANPARALYSE) - facing_dir = null - paralysis = max(max(paralysis,amount),0) - return - -/mob/proc/SetParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(amount,0) - return - -/mob/proc/AdjustParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(paralysis + amount,0) - return - -/mob/proc/Sleeping(amount) - facing_dir = null - sleeping = max(max(sleeping,amount),0) - return - -/mob/proc/SetSleeping(amount) - sleeping = max(amount,0) - return - -/mob/proc/AdjustSleeping(amount) - sleeping = max(sleeping + amount,0) - return - -/mob/proc/Confuse(amount) - confused = max(max(confused,amount),0) - return - -/mob/proc/SetConfused(amount) - confused = max(amount,0) - return - -/mob/proc/AdjustConfused(amount) - confused = max(confused + amount,0) - return - -/mob/proc/Blind(amount) - eye_blind = max(max(eye_blind,amount),0) - return - -/mob/proc/SetBlinded(amount) - eye_blind = max(amount,0) - return - -/mob/proc/AdjustBlinded(amount) - eye_blind = max(eye_blind + amount,0) - return - -/mob/proc/Resting(amount) - facing_dir = null - resting = max(max(resting,amount),0) - update_canmove() - return - -/mob/proc/SetResting(amount) - resting = max(amount,0) - update_canmove() - return - -/mob/proc/AdjustResting(amount) - resting = max(resting + amount,0) - update_canmove() - return - -/mob/proc/AdjustLosebreath(amount) - losebreath = CLAMP(losebreath + amount, 0, 25) - -/mob/proc/SetLosebreath(amount) - losebreath = CLAMP(amount, 0, 25) - -/mob/proc/get_species() - return "" - -/mob/proc/flash_weak_pain() - flick("weak_pain",pain) - -/mob/proc/get_visible_implants(var/class = 0) - var/list/visible_implants = list() - for(var/obj/item/O in embedded) - if(O.w_class > class) - visible_implants += O - return visible_implants - -/mob/proc/embedded_needs_process() - return (embedded.len > 0) - -/mob/proc/yank_out_object() - set category = "Object" - set name = "Yank out object" - set desc = "Remove an embedded item at the cost of bleeding and pain." - set src in view(1) - - if(!isliving(usr) || !usr.checkClickCooldown()) - return - usr.setClickCooldown(20) - - if(usr.stat == 1) - to_chat(usr, "You are unconcious and cannot do that!") - return - - if(usr.restrained()) - to_chat(usr, "You are restrained and cannot do that!") - return - - var/mob/S = src - var/mob/U = usr - var/list/valid_objects = list() - var/self = null - - if(S == U) - self = 1 // Removing object from yourself. - - valid_objects = get_visible_implants(0) - if(!valid_objects.len) - if(self) - to_chat(src, "You have nothing stuck in your body that is large enough to remove.") - else - to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.") - return - - var/obj/item/weapon/selection = tgui_input_list(usr, "What do you want to yank out?", "Embedded objects", valid_objects) - - if(self) - to_chat(src, "You attempt to get a good grip on [selection] in your body.") - else - to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.") - - if(!do_after(U, 30)) - return - if(!selection || !S || !U) - return - - if(self) - visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") - else - visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") - valid_objects = get_visible_implants(0) - if(valid_objects.len == 1) //Yanking out last object - removing verb. - src.verbs -= /mob/proc/yank_out_object - clear_alert("embeddedobject") - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - var/obj/item/organ/external/affected - - for(var/obj/item/organ/external/organ in H.organs) //Grab the organ holding the implant. - for(var/obj/item/O in organ.implants) - if(O == selection) - affected = organ - - affected.implants -= selection - H.shock_stage+=20 - affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction") - - if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15)) - affected.wounds += I - H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50) - - if (ishuman(U)) - var/mob/living/carbon/human/human_user = U - human_user.bloody_hands(H) - - else if(issilicon(src)) - var/mob/living/silicon/robot/R = src - R.embedded -= selection - R.adjustBruteLoss(5) - R.adjustFireLoss(10) - - selection.forceMove(get_turf(src)) - U.put_in_hands(selection) - - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - if(!pinned.len) - anchored = 0 - return 1 - -//Check for brain worms in head. -/mob/proc/has_brain_worms() - - for(var/I in contents) - if(istype(I,/mob/living/simple_mob/animal/borer)) - return I - - return 0 - -/mob/proc/updateicon() - return - -// Please always use this proc, never just set the var directly. -/mob/proc/set_stat(var/new_stat) - . = (stat != new_stat) - stat = new_stat - -/mob/verb/face_direction() - - set name = "Face Direction" - set category = "IC" - set src = usr - - set_face_dir() - - if(!facing_dir) - to_chat(usr, "You are now not facing anything.") - else - to_chat(usr, "You are now facing [dir2text(facing_dir)].") - -/mob/proc/set_face_dir(var/newdir) - if(newdir == facing_dir) - facing_dir = null - else if(newdir) - set_dir(newdir) - facing_dir = newdir - else if(facing_dir) - facing_dir = null - else - set_dir(dir) - facing_dir = dir - -/mob/set_dir() - if(facing_dir) - if(!canface() || lying || buckled || restrained()) - facing_dir = null - else if(dir != facing_dir) - return ..(facing_dir) - else - return ..() - -/mob/verb/northfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(NORTH)) - -/mob/verb/southfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(SOUTH)) - -/mob/verb/eastfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(EAST)) - -/mob/verb/westfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(WEST)) - -// Begin VOREstation edit -/mob/verb/shiftnorth() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_y <= (default_pixel_y + 16)) - pixel_y++ - is_shifted = TRUE - -/mob/verb/shiftsouth() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_y >= (default_pixel_y - 16)) - pixel_y-- - is_shifted = TRUE - -/mob/verb/shiftwest() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_x >= (default_pixel_x - 16)) - pixel_x-- - is_shifted = TRUE - -/mob/verb/shifteast() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_x <= (default_pixel_x + 16)) - pixel_x++ - is_shifted = TRUE -// End VOREstation edit - -/mob/proc/adjustEarDamage() - return - -/mob/proc/setEarDamage() - return - -// Set client view distance (size of client's screen). Returns TRUE if anything changed. -/mob/proc/set_viewsize(var/new_view = world.view) - if (client && new_view != client.view) - client.view = new_view - return TRUE - return FALSE - -//Throwing stuff - -/mob/proc/toggle_throw_mode() - if (src.in_throw_mode) - throw_mode_off() - else - throw_mode_on() - -/mob/proc/throw_mode_off() - src.in_throw_mode = 0 - if(src.throw_icon) //in case we don't have the HUD and we use the hotkey - src.throw_icon.icon_state = "act_throw_off" - -/mob/proc/throw_mode_on() - src.in_throw_mode = 1 - if(src.throw_icon) - src.throw_icon.icon_state = "act_throw_on" - -/mob/proc/isSynthetic() - return 0 - -/mob/proc/is_muzzled() - return 0 - -//Exploitable Info Update - -/mob/proc/amend_exploitable(var/obj/item/I) - if(istype(I)) - exploit_addons |= I - var/exploitmsg = html_decode("\n" + "Has " + I.name + ".") - exploit_record += exploitmsg - -/client/proc/check_has_body_select() - return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) - -/client/verb/body_toggle_head() - set name = "body-toggle-head" - set hidden = 1 - toggle_zone_sel(list(BP_HEAD, O_EYES, O_MOUTH)) - -/client/verb/body_r_arm() - set name = "body-r-arm" - set hidden = 1 - toggle_zone_sel(list(BP_R_ARM,BP_R_HAND)) - -/client/verb/body_l_arm() - set name = "body-l-arm" - set hidden = 1 - toggle_zone_sel(list(BP_L_ARM,BP_L_HAND)) - -/client/verb/body_chest() - set name = "body-chest" - set hidden = 1 - toggle_zone_sel(list(BP_TORSO)) - -/client/verb/body_groin() - set name = "body-groin" - set hidden = 1 - toggle_zone_sel(list(BP_GROIN)) - -/client/verb/body_r_leg() - set name = "body-r-leg" - set hidden = 1 - toggle_zone_sel(list(BP_R_LEG,BP_R_FOOT)) - -/client/verb/body_l_leg() - set name = "body-l-leg" - set hidden = 1 - toggle_zone_sel(list(BP_L_LEG,BP_L_FOOT)) - -/client/proc/toggle_zone_sel(list/zones) - if(!check_has_body_select()) - return - var/obj/screen/zone_sel/selector = mob.zone_sel - selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) - -// This handles setting the client's color variable, which makes everything look a specific color. -// This proc is here so it can be called without needing to check if the client exists, or if the client relogs. -// This is for inheritence since /mob/living will serve most cases. If you need ghosts to use this you'll have to implement that yourself. -/mob/proc/update_client_color() - if(client && client.color) - animate(client, color = null, time = 10) - return - -/mob/proc/swap_hand() - return - -//Throwing stuff -/mob/proc/throw_item(atom/target) - return - -/mob/proc/will_show_tooltip() - if(alpha <= EFFECTIVE_INVIS) - return FALSE - return TRUE - -/mob/MouseEntered(location, control, params) - if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip()) - openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr)) - - ..() - -/mob/MouseDown() - closeToolTip(usr) //No reason not to, really - - ..() - -/mob/MouseExited() - closeToolTip(usr) //No reason not to, really - - ..() - -// Manages a global list of mobs with clients attached, indexed by z-level. -/mob/proc/update_client_z(new_z) // +1 to register, null to unregister. - if(registered_z != new_z) - if(registered_z) - GLOB.players_by_zlevel[registered_z] -= src - if(client) - if(new_z) - GLOB.players_by_zlevel[new_z] += src - registered_z = new_z - else - registered_z = null - -GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list) -/mob/living/update_client_z(new_z) - var/precall_reg_z = registered_z - . = ..() // will update registered_z if necessary - if(precall_reg_z != registered_z) // parent did work, let's do work too - if(precall_reg_z) - GLOB.living_players_by_zlevel[precall_reg_z] -= src - if(registered_z) - GLOB.living_players_by_zlevel[registered_z] += src - -/mob/onTransitZ(old_z, new_z) - ..() - update_client_z(new_z) - -/mob/cloak() - . = ..() - if(client && cloaked_selfimage) - client.images += cloaked_selfimage - -/mob/uncloak() - if(client && cloaked_selfimage) - client.images -= cloaked_selfimage - return ..() - -/mob/get_cloaked_selfimage() - var/icon/selficon = getCompoundIcon(src) - selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White - var/image/selfimage = image(selficon) - selfimage.color = "#0000FF" - selfimage.alpha = 100 - selfimage.layer = initial(layer) - selfimage.plane = initial(plane) - selfimage.loc = src - - return selfimage - -/mob/proc/GetAltName() - return "" - -/mob/proc/get_ghost(even_if_they_cant_reenter = 0) - if(mind) - return mind.get_ghost(even_if_they_cant_reenter) - -/mob/proc/grab_ghost(force) - if(mind) - return mind.grab_ghost(force = force) -======= -/mob/Destroy()//This makes sure that mobs withGLOB.clients/keys are not just deleted from the game. - mob_list -= src - dead_mob_list -= src - living_mob_list -= src - unset_machine() - qdel(hud_used) - clear_fullscreen() - if(client) - for(var/obj/screen/movable/spell_master/spell_master in spell_masters) - qdel(spell_master) - remove_screen_obj_references() - client.screen = list() - if(mind && mind.current == src) - spellremove(src) - ghostize() - QDEL_NULL(plane_holder) - ..() - return QDEL_HINT_HARDDEL_NOW - -/mob/proc/remove_screen_obj_references() - hands = null - pullin = null - purged = null - internals = null - i_select = null - m_select = null - healths = null - throw_icon = null - pain = null - item_use_icon = null - gun_move_icon = null - gun_setting_icon = null - spell_masters = null - zone_sel = null - -/mob/Initialize() - mob_list += src - if(stat == DEAD) - dead_mob_list += src - else - living_mob_list += src - lastarea = get_area(src) - set_focus(src) // VOREStation Add - Key Handling - hook_vr("mob_new",list(src)) //VOREStation Code - update_transform() // Some mobs may start bigger or smaller than normal. - return ..() - -/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - - if(!client && !teleop) return - - if (type) - if((type & VISIBLE_MESSAGE) && (is_blind() || paralysis) )//Vision related - if (!( alt )) - return - else - msg = alt - type = alt_type - if ((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related - if (!( alt )) - return - else - msg = alt - type = alt_type - if ((type & VISIBLE_MESSAGE) && (sdisabilities & BLIND)) - return - // Added voice muffling for Issue 41. - if(stat == UNCONSCIOUS || sleeping > 0) - to_chat(src, "... You can almost hear someone talking ...") - else - to_chat(src,msg) - if(teleop) - to_chat(teleop, create_text_tag("body", "BODY:", teleop) + "[msg]") - return - -// Show a message to all mobs and objects in sight of this one -// This would be for visible actions by the src mob -// message is the message output to anyone who can see e.g. "[src] does something!" -// self_message (optional) is what the src mob sees e.g. "You do something!" -// blind_message (optional) is what blind people will hear e.g. "You hear something!" -/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null, var/range = world.view, var/runemessage) - if(self_message) - if(LAZYLEN(exclude_mobs)) - exclude_mobs |= src - else - exclude_mobs = list(src) - src.show_message(self_message, 1, blind_message, 2) - if(isnull(runemessage)) - runemessage = -1 - . = ..(message, blind_message, exclude_mobs, range, runemessage) // Really not ideal that atom/visible_message has different arg numbering :( - -// Returns an amount of power drawn from the object (-1 if it's not viable). -// If drain_check is set it will not actually drain power, just return a value. -// If surge is set, it will destroy/damage the recipient and not return any power. -// Not sure where to define this, so it can sit here for the rest of time. -/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0) - return -1 - -// Show a message to all mobs and objects in earshot of this one -// This would be for audible actions by the src mob -// message is the message output to anyone who can hear. -// self_message (optional) is what the src mob hears. -// deaf_message (optional) is what deaf people will see. -// hearing_distance (optional) is the range, how many tiles away the message can be heard. -/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message, var/radio_message, var/runemessage) - - var/range = hearing_distance || world.view - var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE) - - var/list/hearing_mobs = hear["mobs"] - var/list/hearing_objs = hear["objs"] - - if(isnull(runemessage)) - runemessage = -1 // Symmetry with mob/audible_message, despite the fact this one doesn't call parent. Maybe it should! - - if(radio_message) - for(var/obj in hearing_objs) - var/obj/O = obj - O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null) - else - for(var/obj in hearing_objs) - var/obj/O = obj - O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - - for(var/mob in hearing_mobs) - var/mob/M = mob - var/msg = message - if(self_message && M==src) - msg = self_message - M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - if(runemessage != -1) - M.create_chat_message(src, "[runemessage || message]", FALSE, list("emote"), audible = FALSE) - -/mob/proc/findname(msg) - for(var/mob/M in mob_list) - if (M.real_name == text("[]", msg)) - return M - return 0 - -/mob/proc/Life() -// if(organStructure) -// organStructure.ProcessOrgans() - return - -#define UNBUCKLED 0 -#define PARTIALLY_BUCKLED 1 -#define FULLY_BUCKLED 2 -/mob/proc/buckled() - // Preliminary work for a future buckle rewrite, - // where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting) - if(!buckled) - return UNBUCKLED - return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED - -/mob/proc/is_blind() - return ((sdisabilities & BLIND) || blinded || incapacitated(INCAPACITATION_KNOCKOUT)) - -/mob/proc/is_deaf() - return ((sdisabilities & DEAF) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT)) - -/mob/proc/is_physically_disabled() - return incapacitated(INCAPACITATION_DISABLED) - -/mob/proc/cannot_stand() - return incapacitated(INCAPACITATION_KNOCKDOWN) - -/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) - if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned) - return 1 - - if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting)) - return 1 - - if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH))) - return 1 - - if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained()) - return 1 - - if((incapacitation_flags & (INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY))) - var/buckling = buckled() - if(buckling >= PARTIALLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_PARTIALLY)) - return 1 - if(buckling == FULLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_FULLY)) - return 1 - - return 0 - -#undef UNBUCKLED -#undef PARTIALLY_BUCKLED -#undef FULLY_BUCKLED - -/mob/proc/restrained() - return - -/mob/proc/reset_view(atom/A) - if (client) - if (istype(A, /atom/movable)) - client.perspective = EYE_PERSPECTIVE - client.eye = A - else - if (isturf(loc)) - client.eye = client.mob - client.perspective = MOB_PERSPECTIVE - else - client.perspective = EYE_PERSPECTIVE - client.eye = loc - return TRUE - -/mob/verb/pointed(atom/A as mob|obj|turf in view()) - set name = "Point To" - set category = "Object" - - if(!src || !isturf(src.loc) || !(A in view(src.loc))) - return 0 - if(istype(A, /obj/effect/decal/point)) - return 0 - - var/turf/tile = get_turf(A) - if (!tile) - return 0 - - var/turf/our_tile = get_turf(src) - var/obj/visual = new /obj/effect/decal/point(our_tile) - visual.invisibility = invisibility - visual.plane = ABOVE_PLANE - visual.layer = FLY_LAYER - - animate(visual, - pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, - pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, - time = 1.7, - easing = EASE_OUT) - - QDEL_IN(visual, 2 SECONDS) //Better qdel - - face_atom(A) - return 1 - - -/mob/proc/ret_grab(list/L, flag) - return - -/mob/verb/mode() - set name = "Activate Held Object" - set category = "Object" - set src = usr - - return - -/* -/mob/verb/dump_source() - - var/master = "
"
-	for(var/t in typesof(/area))
-		master += text("[]\n", t)
-		//Foreach goto(26)
-	src << browse(master)
-	return
-*/
-
-/mob/verb/memory()
-	set name = "Notes"
-	set category = "IC"
-	if(mind)
-		mind.show_memory(src)
-	else
-		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
-
-/mob/verb/add_memory(msg as message)
-	set name = "Add Note"
-	set category = "IC"
-
-	msg = sanitize(msg)
-
-	if(mind)
-		mind.store_memory(msg)
-	else
-		to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
-
-/mob/proc/store_memory(msg as message, popup, sane = 1)
-	msg = copytext(msg, 1, MAX_MESSAGE_LEN)
-
-	if (sane)
-		msg = sanitize(msg)
-
-	if (length(memory) == 0)
-		memory += msg
-	else
-		memory += "
[msg]" - - if (popup) - memory() - -/mob/proc/update_flavor_text() - set src in usr - if(usr != src) - to_chat(usr, "No.") - var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb.","Flavor Text",html_decode(flavor_text)) as message|null, extra = 0) //VOREStation Edit: separating out OOC notes - - if(msg != null) - flavor_text = msg - -/mob/proc/warn_flavor_changed() - if(flavor_text && flavor_text != "") // don't spam people that don't use it! - to_chat(src, "

OOC Warning:

") - to_chat(src, "Your flavor text is likely out of date! Change") - -/mob/proc/print_flavor_text() - if (flavor_text && flavor_text != "") - var/msg = replacetext(flavor_text, "\n", " ") - if(length(msg) <= 40) - return "[msg]" - else - return "[copytext_preserve_html(msg, 1, 37)]... More..." - -/* -/mob/verb/help() - set name = "Help" - src << browse('html/help.html', "window=help") - return -*/ - -/mob/proc/set_respawn_timer(var/time) - // Try to figure out what time to use - - // Special cases, can never respawn - if(ticker?.mode?.deny_respawn) - time = -1 - else if(!config.abandon_allowed) - time = -1 - else if(!config.respawn) - time = -1 - - // Special case for observing before game start - else if(ticker?.current_state <= GAME_STATE_SETTING_UP) - time = 1 MINUTE - - // Wasn't given a time, use the config time - else if(!time) - time = config.respawn_time - - var/keytouse = ckey - // Try harder to find a key to use - if(!keytouse && key) - keytouse = ckey(key) - else if(!keytouse && mind?.key) - keytouse = ckey(mind.key) - - GLOB.respawn_timers[keytouse] = world.time + time - -/mob/observer/dead/set_respawn_timer() - if(config.antag_hud_restricted && has_enabled_antagHUD) - ..(-1) - else - return // Don't set it, no need - -/mob/verb/abandon_mob() - set name = "Return to Menu" - set category = "OOC" - - if(stat != DEAD || !ticker) - to_chat(usr, "You must be dead to use this!") - return - - // Final chance to abort "respawning" - if(mind && timeofdeath) // They had spawned before - var/choice = tgui_alert(usr, "Returning to the menu will prevent your character from being revived in-round. Are you sure?", "Confirmation", list("No, wait", "Yes, leave")) - if(choice == "No, wait") - return - - // Beyond this point, you're going to respawn - to_chat(usr, config.respawn_message) - - if(!client) - log_game("[usr.key] AM failed due to disconnect.") - return - client.screen.Cut() - client.screen += client.void - if(!client) - log_game("[usr.key] AM failed due to disconnect.") - return - - announce_ghost_joinleave(client, 0) - - var/mob/new_player/M = new /mob/new_player() - if(!client) - log_game("[usr.key] AM failed due to disconnect.") - qdel(M) - return - - M.key = key - if(M.mind) - M.mind.reset() - return - -/client/verb/changes() - set name = "Changelog" - set category = "OOC" - src << browse('html/changelog.html', "window=changes;size=675x650") - if(prefs.lastchangelog != changelog_hash) - prefs.lastchangelog = changelog_hash - SScharacter_setup.queue_preferences_save(prefs) - winset(src, "rpane.changelog", "background-color=none;font-style=;") - -/mob/verb/observe() - set name = "Observe" - set category = "OOC" - var/is_admin = 0 - - if(client.holder && (client.holder.rights & R_ADMIN|R_EVENT)) - is_admin = 1 - else if(stat != DEAD || istype(src, /mob/new_player)) - to_chat(usr, "You must be observing to use this!") - return - - if(is_admin && stat == DEAD) - is_admin = 0 - - var/list/targets = list() - - - targets += observe_list_format(nuke_disks) - targets += observe_list_format(all_singularities) - targets += getmobs() - targets += observe_list_format(sortAtom(mechas_list)) - targets += observe_list_format(SSshuttles.ships) - - client.perspective = EYE_PERSPECTIVE - - var/eye_name = null - - var/ok = "[is_admin ? "Admin Observe" : "Observe"]" - eye_name = tgui_input_list(usr, "Select something to [ok]:", "Select Target", targets) - - if (!eye_name) - return - - var/mob/mob_eye = targets[eye_name] - - if(client && mob_eye) - client.eye = mob_eye - if (is_admin) - client.adminobs = 1 - if(mob_eye == client.mob || client.eye == client.mob) - client.adminobs = 0 - -/mob/verb/cancel_camera() - set name = "Cancel Camera View" - set category = "OOC" - unset_machine() - reset_view(null) - -/mob/Topic(href, href_list) - if(href_list["mach_close"]) - var/t1 = text("window=[href_list["mach_close"]]") - unset_machine() - src << browse(null, t1) - - if(href_list["flavor_more"]) - usr << browse(text("[][]", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name)) - onclose(usr, "[name]") - if(href_list["flavor_change"]) - update_flavor_text() -// ..() - return - - -/mob/proc/pull_damage() - return 0 - -/mob/verb/stop_pulling() - - set name = "Stop Pulling" - set category = "IC" - - if(pulling) - if(ishuman(pulling)) - var/mob/living/carbon/human/H = pulling - visible_message(SPAN_WARNING("\The [src] lets go of \the [H]."), SPAN_NOTICE("You let go of \the [H]."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] lets go of you.")) - pulling.pulledby = null - pulling = null - if(pullin) - pullin.icon_state = "pull0" - -/mob/proc/start_pulling(var/atom/movable/AM) - - if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! - return - - if (AM.anchored) - to_chat(src, "It won't budge!") - return - - var/mob/M = AM - if(ismob(AM)) - - if(!can_pull_mobs || !can_pull_size) - to_chat(src, "They won't budge!") - return - - if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) - to_chat(src, "[M] is too large for you to move!") - return - - if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) - to_chat(src, "[M] is too heavy for you to move!") - return - - // If your size is larger than theirs and you have some - // kind of mob pull value AT ALL, you will be able to pull - // them, so don't bother checking that explicitly. - - if(M.grabbed_by.len) - // Only start pulling when nobody else has a grab on them - . = 1 - for(var/obj/item/weapon/grab/G in M.grabbed_by) - if(G.assailant != usr) - . = 0 - else - qdel(G) - if(!.) - to_chat(src, "Somebody has a grip on them!") - return - - if(!iscarbon(src)) - M.LAssailant = null - else - M.LAssailant = usr - - else if(isobj(AM)) - var/obj/I = AM - if(!can_pull_size || can_pull_size < I.w_class) - to_chat(src, "It won't budge!") - return - - if(pulling) - var/pulling_old = pulling - stop_pulling() - // Are we pulling the same thing twice? Just stop pulling. - if(pulling_old == AM) - return - - src.pulling = AM - AM.pulledby = src - - if(pullin) - pullin.icon_state = "pull1" - - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(H.lying) // If they're on the ground we're probably dragging their arms to move them - visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s arms."), SPAN_NOTICE("You lean down and grip \the [H]'s arms."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] leans down and grips your arms.")) - else //Otherwise we're probably just holding their arm to lead them somewhere - visible_message(SPAN_WARNING("\The [src] grips \the [H]'s arm."), SPAN_NOTICE("You grip \the [H]'s arm."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] grips your arm.")) - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback - - if(H.pull_damage()) - to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.") - - //Attempted fix for people flying away through space when cuffed and dragged. - if(ismob(AM)) - var/mob/pulled = AM - pulled.inertia_dir = 0 - -/mob/proc/can_use_hands() - return - -/mob/proc/is_active() - return (0 >= usr.stat) - -/mob/proc/is_dead() - return stat == DEAD - -/mob/proc/is_mechanical() - if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI")) - return 1 - return istype(src, /mob/living/silicon) || get_species() == "Machine" - -/mob/proc/is_ready() - return client && !!mind - -/mob/proc/get_gender() - return gender - -/mob/proc/see(message) - if(!is_active()) - return 0 - to_chat(src,message) - return 1 - -/mob/proc/show_viewers(message) - for(var/mob/M in viewers()) - M.see(message) - -/mob/Stat() - ..() - . = (is_client_active(10 MINUTES)) - - if(.) - if(statpanel("Status")) - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - if(ticker && ticker.current_state != GAME_STATE_PREGAME) - stat("Station Time", stationtime2text()) - stat("Station Date", stationdate2text()) - stat("Round Duration", roundduration2text()) - - if(client.holder) - if(statpanel("Status")) - stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") - stat("Keys Held", keys2text(client.move_keys_held | client.mod_keys_held)) - stat("Next Move ADD", dirs2text(client.next_move_dir_add)) - stat("Next Move SUB", dirs2text(client.next_move_dir_sub)) - - if(statpanel("MC")) - stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat("World Time:", world.time) - stat("Real time of day:", REALTIMEOFDAY) - stat(null) - if(GLOB) - GLOB.stat_entry() - else - stat("Globals:", "ERROR") - if(Master) - Master.stat_entry() - else - stat("Master Controller:", "ERROR") - if(Failsafe) - Failsafe.stat_entry() - else - stat("Failsafe Controller:", "ERROR") - if(Master) - stat(null) - for(var/datum/controller/subsystem/SS in Master.subsystems) - SS.stat_entry() - - if(statpanel("Tickets")) - GLOB.ahelp_tickets.stat_entry() - - - if(length(GLOB.sdql2_queries)) - if(statpanel("SDQL2")) - stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) - for(var/i in GLOB.sdql2_queries) - var/datum/SDQL2_query/Q = i - Q.generate_stat() - - if(listed_turf && client) - if(!TurfAdjacent(listed_turf)) - listed_turf = null - else - if(statpanel("Turf")) - stat(listed_turf) - for(var/atom/A in listed_turf) - if(!A.mouse_opacity) - continue - if(A.invisibility > see_invisible) - continue - if(is_type_in_list(A, shouldnt_see)) - continue - if(A.plane > plane) - continue - stat(A) - - -// facing verbs -/mob/proc/canface() -// if(!canmove) return 0 //VOREStation Edit. Redundant check that only affects conscious proning, actual inability to turn and shift around handled by actual inabilities. - if(stat) return 0 - if(anchored) return 0 - if(transforming) return 0 - return 1 - -// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet. -/mob/proc/can_stand_overridden() - return 0 - -//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. -/mob/proc/update_canmove() - return canmove - - -/mob/proc/facedir(var/ndir) - if(!canface() || (client && (client.moving || !checkMoveCooldown()))) - DEBUG_INPUT("Denying Facedir for [src] (moving=[client?.moving])") - return 0 - set_dir(ndir) - if(buckled && buckled.buckle_movable) - buckled.set_dir(ndir) - setMoveCooldown(movement_delay()) - return 1 - - -/mob/verb/eastface() - set hidden = 1 - return facedir(client.client_dir(EAST)) - - -/mob/verb/westface() - set hidden = 1 - return facedir(client.client_dir(WEST)) - - -/mob/verb/northface() - set hidden = 1 - return facedir(client.client_dir(NORTH)) - - -/mob/verb/southface() - set hidden = 1 - return facedir(client.client_dir(SOUTH)) - - -//This might need a rename but it should replace the can this mob use things check -/mob/proc/IsAdvancedToolUser() - return 0 - -/mob/proc/Stun(amount) - if(status_flags & CANSTUN) - facing_dir = null - stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" - if(status_flags & CANSTUN) - stunned = max(amount,0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/AdjustStunned(amount) - if(status_flags & CANSTUN) - stunned = max(stunned + amount,0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/Weaken(amount) - if(status_flags & CANWEAKEN) - facing_dir = null - weakened = max(max(weakened,amount),0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/SetWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(amount,0) - update_canmove() //can you guess what this does yet? - return - -/mob/proc/AdjustWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(weakened + amount,0) - update_canmove() //updates lying, canmove and icons - return - -/mob/proc/Paralyse(amount) - if(status_flags & CANPARALYSE) - facing_dir = null - paralysis = max(max(paralysis,amount),0) - return - -/mob/proc/SetParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(amount,0) - return - -/mob/proc/AdjustParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(paralysis + amount,0) - return - -/mob/proc/Sleeping(amount) - facing_dir = null - sleeping = max(max(sleeping,amount),0) - return - -/mob/proc/SetSleeping(amount) - sleeping = max(amount,0) - return - -/mob/proc/AdjustSleeping(amount) - sleeping = max(sleeping + amount,0) - return - -/mob/proc/Confuse(amount) - confused = max(max(confused,amount),0) - return - -/mob/proc/SetConfused(amount) - confused = max(amount,0) - return - -/mob/proc/AdjustConfused(amount) - confused = max(confused + amount,0) - return - -/mob/proc/Blind(amount) - eye_blind = max(max(eye_blind,amount),0) - return - -/mob/proc/SetBlinded(amount) - eye_blind = max(amount,0) - return - -/mob/proc/AdjustBlinded(amount) - eye_blind = max(eye_blind + amount,0) - return - -/mob/proc/Resting(amount) - facing_dir = null - resting = max(max(resting,amount),0) - update_canmove() - return - -/mob/proc/SetResting(amount) - resting = max(amount,0) - update_canmove() - return - -/mob/proc/AdjustResting(amount) - resting = max(resting + amount,0) - update_canmove() - return - -/mob/proc/AdjustLosebreath(amount) - losebreath = CLAMP(losebreath + amount, 0, 25) - -/mob/proc/SetLosebreath(amount) - losebreath = CLAMP(amount, 0, 25) - -/mob/proc/get_species() - return "" - -/mob/proc/flash_weak_pain() - flick("weak_pain",pain) - -/mob/proc/get_visible_implants(var/class = 0) - var/list/visible_implants = list() - for(var/obj/item/O in embedded) - if(O.w_class > class) - visible_implants += O - return visible_implants - -/mob/proc/embedded_needs_process() - return (embedded.len > 0) - -/mob/proc/yank_out_object() - set category = "Object" - set name = "Yank out object" - set desc = "Remove an embedded item at the cost of bleeding and pain." - set src in view(1) - - if(!isliving(usr) || !usr.checkClickCooldown()) - return - usr.setClickCooldown(20) - - if(usr.stat == 1) - to_chat(usr, "You are unconcious and cannot do that!") - return - - if(usr.restrained()) - to_chat(usr, "You are restrained and cannot do that!") - return - - var/mob/S = src - var/mob/U = usr - var/list/valid_objects = list() - var/self = null - - if(S == U) - self = 1 // Removing object from yourself. - - valid_objects = get_visible_implants(0) - if(!valid_objects.len) - if(self) - to_chat(src, "You have nothing stuck in your body that is large enough to remove.") - else - to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.") - return - - var/obj/item/weapon/selection = tgui_input_list(usr, "What do you want to yank out?", "Embedded objects", valid_objects) - - if(self) - to_chat(src, "You attempt to get a good grip on [selection] in your body.") - else - to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.") - - if(!do_after(U, 30)) - return - if(!selection || !S || !U) - return - - if(self) - visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") - else - visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") - valid_objects = get_visible_implants(0) - if(valid_objects.len == 1) //Yanking out last object - removing verb. - src.verbs -= /mob/proc/yank_out_object - clear_alert("embeddedobject") - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - var/obj/item/organ/external/affected - - for(var/obj/item/organ/external/organ in H.organs) //Grab the organ holding the implant. - for(var/obj/item/O in organ.implants) - if(O == selection) - affected = organ - - affected.implants -= selection - H.shock_stage+=20 - affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction") - - if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15)) - affected.wounds += I - H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50) - - if (ishuman(U)) - var/mob/living/carbon/human/human_user = U - human_user.bloody_hands(H) - - else if(issilicon(src)) - var/mob/living/silicon/robot/R = src - R.embedded -= selection - R.adjustBruteLoss(5) - R.adjustFireLoss(10) - - selection.forceMove(get_turf(src)) - U.put_in_hands(selection) - - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - if(!pinned.len) - anchored = FALSE - return 1 - -//Check for brain worms in head. -/mob/proc/has_brain_worms() - - for(var/I in contents) - if(istype(I,/mob/living/simple_mob/animal/borer)) - return I - - return 0 - -/mob/proc/updateicon() - return - -// Please always use this proc, never just set the var directly. -/mob/proc/set_stat(var/new_stat) - . = (stat != new_stat) - stat = new_stat - -/mob/verb/face_direction() - - set name = "Face Direction" - set category = "IC" - set src = usr - - set_face_dir() - - if(!facing_dir) - to_chat(usr, "You are now not facing anything.") - else - to_chat(usr, "You are now facing [dir2text(facing_dir)].") - -/mob/proc/set_face_dir(var/newdir) - if(newdir == facing_dir) - facing_dir = null - else if(newdir) - set_dir(newdir) - facing_dir = newdir - else if(facing_dir) - facing_dir = null - else - set_dir(dir) - facing_dir = dir - -/mob/set_dir() - if(facing_dir) - if(!canface() || lying || buckled || restrained()) - facing_dir = null - else if(dir != facing_dir) - return ..(facing_dir) - else - return ..() - -/mob/verb/northfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(NORTH)) - -/mob/verb/southfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(SOUTH)) - -/mob/verb/eastfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(EAST)) - -/mob/verb/westfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(WEST)) - -// Begin VOREstation edit -/mob/verb/shiftnorth() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_y <= (default_pixel_y + 16)) - pixel_y++ - is_shifted = TRUE - -/mob/verb/shiftsouth() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_y >= (default_pixel_y - 16)) - pixel_y-- - is_shifted = TRUE - -/mob/verb/shiftwest() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_x >= (default_pixel_x - 16)) - pixel_x-- - is_shifted = TRUE - -/mob/verb/shifteast() - set hidden = TRUE - if(!canface()) - return FALSE - if(pixel_x <= (default_pixel_x + 16)) - pixel_x++ - is_shifted = TRUE -// End VOREstation edit - -/mob/proc/adjustEarDamage() - return - -/mob/proc/setEarDamage() - return - -// Set client view distance (size of client's screen). Returns TRUE if anything changed. -/mob/proc/set_viewsize(var/new_view = world.view) - if (client && new_view != client.view) - client.view = new_view - return TRUE - return FALSE - -//Throwing stuff - -/mob/proc/toggle_throw_mode() - if (src.in_throw_mode) - throw_mode_off() - else - throw_mode_on() - -/mob/proc/throw_mode_off() - src.in_throw_mode = 0 - if(src.throw_icon) //in case we don't have the HUD and we use the hotkey - src.throw_icon.icon_state = "act_throw_off" - -/mob/proc/throw_mode_on() - src.in_throw_mode = 1 - if(src.throw_icon) - src.throw_icon.icon_state = "act_throw_on" - -/mob/proc/isSynthetic() - return 0 - -/mob/proc/is_muzzled() - return 0 - -//Exploitable Info Update - -/mob/proc/amend_exploitable(var/obj/item/I) - if(istype(I)) - exploit_addons |= I - var/exploitmsg = html_decode("\n" + "Has " + I.name + ".") - exploit_record += exploitmsg - -/client/proc/check_has_body_select() - return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) - -/client/verb/body_toggle_head() - set name = "body-toggle-head" - set hidden = 1 - toggle_zone_sel(list(BP_HEAD, O_EYES, O_MOUTH)) - -/client/verb/body_r_arm() - set name = "body-r-arm" - set hidden = 1 - toggle_zone_sel(list(BP_R_ARM,BP_R_HAND)) - -/client/verb/body_l_arm() - set name = "body-l-arm" - set hidden = 1 - toggle_zone_sel(list(BP_L_ARM,BP_L_HAND)) - -/client/verb/body_chest() - set name = "body-chest" - set hidden = 1 - toggle_zone_sel(list(BP_TORSO)) - -/client/verb/body_groin() - set name = "body-groin" - set hidden = 1 - toggle_zone_sel(list(BP_GROIN)) - -/client/verb/body_r_leg() - set name = "body-r-leg" - set hidden = 1 - toggle_zone_sel(list(BP_R_LEG,BP_R_FOOT)) - -/client/verb/body_l_leg() - set name = "body-l-leg" - set hidden = 1 - toggle_zone_sel(list(BP_L_LEG,BP_L_FOOT)) - -/client/proc/toggle_zone_sel(list/zones) - if(!check_has_body_select()) - return - var/obj/screen/zone_sel/selector = mob.zone_sel - selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) - -// This handles setting the client's color variable, which makes everything look a specific color. -// This proc is here so it can be called without needing to check if the client exists, or if the client relogs. -// This is for inheritence since /mob/living will serve most cases. If you need ghosts to use this you'll have to implement that yourself. -/mob/proc/update_client_color() - if(client && client.color) - animate(client, color = null, time = 10) - return - -/mob/proc/swap_hand() - return - -//Throwing stuff -/mob/proc/throw_item(atom/target) - return - -/mob/proc/will_show_tooltip() - if(alpha <= EFFECTIVE_INVIS) - return FALSE - return TRUE - -/mob/MouseEntered(location, control, params) - if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip()) - openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr)) - - ..() - -/mob/MouseDown() - closeToolTip(usr) //No reason not to, really - - ..() - -/mob/MouseExited() - closeToolTip(usr) //No reason not to, really - - ..() - -// Manages a global list of mobs with clients attached, indexed by z-level. -/mob/proc/update_client_z(new_z) // +1 to register, null to unregister. - if(registered_z != new_z) - if(registered_z) - GLOB.players_by_zlevel[registered_z] -= src - if(client) - if(new_z) - GLOB.players_by_zlevel[new_z] += src - registered_z = new_z - else - registered_z = null - -GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list) -/mob/living/update_client_z(new_z) - var/precall_reg_z = registered_z - . = ..() // will update registered_z if necessary - if(precall_reg_z != registered_z) // parent did work, let's do work too - if(precall_reg_z) - GLOB.living_players_by_zlevel[precall_reg_z] -= src - if(registered_z) - GLOB.living_players_by_zlevel[registered_z] += src - -/mob/onTransitZ(old_z, new_z) - ..() - update_client_z(new_z) - -/mob/cloak() - . = ..() - if(client && cloaked_selfimage) - client.images += cloaked_selfimage - -/mob/uncloak() - if(client && cloaked_selfimage) - client.images -= cloaked_selfimage - return ..() - -/mob/get_cloaked_selfimage() - var/icon/selficon = getCompoundIcon(src) - selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White - var/image/selfimage = image(selficon) - selfimage.color = "#0000FF" - selfimage.alpha = 100 - selfimage.layer = initial(layer) - selfimage.plane = initial(plane) - selfimage.loc = src - - return selfimage - -/mob/proc/GetAltName() - return "" - -/mob/proc/get_ghost(even_if_they_cant_reenter = 0) - if(mind) - return mind.get_ghost(even_if_they_cant_reenter) - -/mob/proc/grab_ghost(force) - if(mind) - return mind.grab_ghost(force = force) ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) From b4d0e07229bc7f90ca8c2d71322e19f58876bf02 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 16 Jul 2021 18:36:36 -0400 Subject: [PATCH 17/17] powder that makes you say yes --- .../machinery/dispenser/reagent_tank.dm | 958 +----------------- 1 file changed, 7 insertions(+), 951 deletions(-) diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index d4784809d1..94cfbc4ec9 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -1,12 +1,11 @@ -<<<<<<< HEAD /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." icon = 'icons/obj/objects.dmi' icon_state = "watertank" layer = TABLE_LAYER - density = 1 - anchored = 0 + density = TRUE + anchored = FALSE pressure_resistance = 2*ONE_ATMOSPHERE var/obj/item/hose_connector/input/active/InputSocket @@ -248,8 +247,8 @@ desc = "Refills pepper spray canisters." icon = 'icons/obj/objects.dmi' icon_state = "peppertank" - anchored = 1 - density = 0 + anchored = TRUE + density = FALSE amount_per_transfer_from_this = 45 /obj/structure/reagent_dispensers/peppertank/Initialize() @@ -264,7 +263,7 @@ icon = 'icons/obj/vending.dmi' icon_state = "water_cooler" possible_transfer_amounts = null - anchored = 1 + anchored = TRUE var/bottle = 0 var/cups = 0 var/cupholder = 0 @@ -417,7 +416,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "virusfoodtank" amount_per_transfer_from_this = 10 - anchored = 1 + anchored = TRUE /obj/structure/reagent_dispensers/virusfood/Initialize() . = ..() @@ -429,7 +428,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "acidtank" amount_per_transfer_from_this = 10 - anchored = 1 + anchored = TRUE /obj/structure/reagent_dispensers/acid/Initialize() . = ..() @@ -469,946 +468,3 @@ /obj/structure/reagent_dispenser/he3/Initialize() ..() reagents.add_reagent("helium3",1000) -||||||| parent of 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100) -/obj/structure/reagent_dispensers - name = "Dispenser" - desc = "..." - icon = 'icons/obj/objects.dmi' - icon_state = "watertank" - layer = TABLE_LAYER - density = 1 - anchored = 0 - pressure_resistance = 2*ONE_ATMOSPHERE - - var/obj/item/hose_connector/input/active/InputSocket - var/obj/item/hose_connector/output/active/OutputSocket - - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = list(10,25,50,100) - -/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) - return - -/obj/structure/reagent_dispensers/Destroy() - QDEL_NULL(InputSocket) - QDEL_NULL(OutputSocket) - - ..() - -/obj/structure/reagent_dispensers/Initialize() - var/datum/reagents/R = new/datum/reagents(5000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - - InputSocket = new(src) - InputSocket.carrier = src - OutputSocket = new(src) - OutputSocket.carrier = src - - . = ..() - -/obj/structure/reagent_dispensers/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - . += "It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - . += "[R.volume] units of [R.name]" - else - . += "Nothing." - -/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) - if (N) - amount_per_transfer_from_this = N - -/obj/structure/reagent_dispensers/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return - -/obj/structure/reagent_dispensers/blob_act() - qdel(src) - - - -//Dispensers -/obj/structure/reagent_dispensers/watertank - name = "watertank" - desc = "A watertank." - icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit - icon_state = "watertank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/watertank/Initialize() - . = ..() - reagents.add_reagent("water", 1000) - -/obj/structure/reagent_dispensers/watertank/high - name = "high-capacity water tank" - desc = "A highly-pressurized water tank made to hold vast amounts of water.." - icon_state = "watertank_high" - -/obj/structure/reagent_dispensers/watertank/high/Initialize() - . = ..() - reagents.add_reagent("water", 4000) - -/obj/structure/reagent_dispensers/fueltank - name = "fueltank" - desc = "A fueltank." - icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/obj/item/device/assembly_holder/rig = null - -/obj/structure/reagent_dispensers/fueltank/Initialize() - . = ..() - reagents.add_reagent("fuel",1000) - -//VOREStation Add -/obj/structure/reagent_dispensers/fueltank/high - name = "high-capacity fuel tank" - desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." - icon_state = "weldtank_high" - -/obj/structure/reagent_dispensers/fueltank/high/Initialize() - . = ..() - reagents.add_reagent("fuel",4000) - -/obj/structure/reagent_dispensers/foam - name = "foamtank" - desc = "A foam tank." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "foamtank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/foam/Initialize() - . = ..() - reagents.add_reagent("firefoam",1000) - -/obj/structure/reagent_dispensers/fueltank/barrel - name = "hazardous barrel" - desc = "An open-topped barrel full of nasty-looking liquid." - icon_state = "barrel" - modded = TRUE - -/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (W.is_wrench()) //can't wrench it shut, it's always open - return - return ..() -//VOREStation Add End - -/obj/structure/reagent_dispensers/fueltank/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - if(modded) - . += "Fuel faucet is wrenched open, leaking the fuel!" - if(rig) - . += "There is some kind of device rigged to the tank." - -/obj/structure/reagent_dispensers/fueltank/attack_hand() - if (rig) - usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") - if(do_after(usr, 20)) - usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") - rig.loc = get_turf(usr) - rig = null - overlays = new/list() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (W.is_wrench()) - user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ - "You wrench [src]'s faucet [modded ? "closed" : "open"]") - modded = modded ? 0 : 1 - playsound(src, W.usesound, 75, 1) - if (modded) - message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") - log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") - leak_fuel(amount_per_transfer_from_this) - if (istype(W,/obj/item/device/assembly_holder)) - if (rig) - to_chat(user, "There is another device in the way.") - return ..() - user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") - if(do_after(user, 20)) - user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") - - var/obj/item/device/assembly_holder/H = W - if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) - message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") - log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") - - rig = W - user.drop_item() - W.loc = src - - var/icon/test = getFlatIcon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) - add_overlay(test) - - return ..() - - -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - if(istype(Proj.firer)) - message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") - log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") - - if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() - -/obj/structure/reagent_dispensers/fueltank/ex_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/blob_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/proc/explode() - if (reagents.total_volume > 500) - explosion(src.loc,1,2,4) - else if (reagents.total_volume > 100) - explosion(src.loc,0,1,3) - else if (reagents.total_volume > 50) - explosion(src.loc,-1,1,2) - if(src) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) - if (modded) - explode() - else if (temperature > T0C+500) - explode() - return ..() - -/obj/structure/reagent_dispensers/fueltank/Move() - if (..() && modded) - leak_fuel(amount_per_transfer_from_this/10.0) - -/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) - if (reagents.total_volume == 0) - return - - amount = min(amount, reagents.total_volume) - reagents.remove_reagent("fuel",amount) - new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) - -/obj/structure/reagent_dispensers/peppertank - name = "Pepper Spray Refiller" - desc = "Refills pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" - anchored = 1 - density = 0 - amount_per_transfer_from_this = 45 - -/obj/structure/reagent_dispensers/peppertank/Initialize() - . = ..() - reagents.add_reagent("condensedcapsaicin",1000) - - -/obj/structure/reagent_dispensers/water_cooler - name = "Water-Cooler" - desc = "A machine that dispenses water to drink." - amount_per_transfer_from_this = 5 - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - possible_transfer_amounts = null - anchored = 1 - var/bottle = 0 - var/cups = 0 - var/cupholder = 0 - -/obj/structure/reagent_dispensers/water_cooler/full - bottle = 1 - cupholder = 1 - cups = 10 - -/obj/structure/reagent_dispensers/water_cooler/Initialize() - . = ..() - if(bottle) - reagents.add_reagent("water",120) - update_icon() - -/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - . = ..() - if(cupholder) - . += "There are [cups] cups in the cup dispenser." - -/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() - set name = "Rotate Cooler Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) - if(I.is_wrench()) - src.add_fingerprint(user) - if(bottle) - playsound(src, I.usesound, 50, 1) - if(do_after(user, 20) && bottle) - to_chat(user, "You unfasten the jug.") - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) - for(var/datum/reagent/R in reagents.reagent_list) - var/total_reagent = reagents.get_reagent_amount(R.id) - G.reagents.add_reagent(R.id, total_reagent) - reagents.clear_reagents() - bottle = 0 - update_icon() - else - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, 20 * I.toolspeed, src)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - playsound(src, I.usesound, 50, 1) - return - - if(I.is_screwdriver()) - if(cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You take the cup dispenser off.") - new /obj/item/stack/material/plastic( src.loc ) - if(cups) - for(var/i = 0 to cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups = 0 - cupholder = 0 - update_icon() - return - if(!bottle && !cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You start taking the water-cooler apart.") - if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) - to_chat(user, "You take the water-cooler apart.") - new /obj/item/stack/material/plastic( src.loc, 4 ) - qdel(src) - return - - if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) - src.add_fingerprint(user) - if(!bottle) - if(anchored) - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I - to_chat(user, "You start to screw the bottle onto the water-cooler.") - if(do_after(user, 20) && !bottle && anchored) - bottle = 1 - update_icon() - to_chat(user, "You screw the bottle onto the water-cooler!") - for(var/datum/reagent/R in G.reagents.reagent_list) - var/total_reagent = G.reagents.get_reagent_amount(R.id) - reagents.add_reagent(R.id, total_reagent) - qdel(G) - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a bottle there!") - return 1 - - if(istype(I, /obj/item/stack/material/plastic)) - if(!cupholder) - if(anchored) - var/obj/item/stack/material/plastic/P = I - src.add_fingerprint(user) - to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && !cupholder && anchored) - if (P.use(1)) - to_chat(user, "You attach a cup dispenser onto the water-cooler.") - cupholder = 1 - update_icon() - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a cup dispenser there!") - return - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) - if(cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups-- - flick("[icon_state]-vend", src) - return - -/obj/structure/reagent_dispensers/water_cooler/update_icon() - icon_state = "water_cooler" - cut_overlays() - if(bottle) - add_overlay("water_cooler_bottle") - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg." - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/beerkeg/Initialize() - . = ..() - reagents.add_reagent("beer",1000) - -/obj/structure/reagent_dispensers/beerkeg/fakenuke - name = "nuclear beer keg" - desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nuclearbomb0" - -/obj/structure/reagent_dispensers/virusfood - name = "Virus Food Dispenser" - desc = "A dispenser of virus food. Yum." - icon = 'icons/obj/objects.dmi' - icon_state = "virusfoodtank" - amount_per_transfer_from_this = 10 - anchored = 1 - -/obj/structure/reagent_dispensers/virusfood/Initialize() - . = ..() - reagents.add_reagent("virusfood", 1000) - -/obj/structure/reagent_dispensers/acid - name = "Sulphuric Acid Dispenser" - desc = "A dispenser of acid for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "acidtank" - amount_per_transfer_from_this = 10 - anchored = 1 - -/obj/structure/reagent_dispensers/acid/Initialize() - . = ..() - reagents.add_reagent("sacid", 1000) - -//Cooking oil refill tank -/obj/structure/reagent_dispensers/cookingoil - name = "cooking oil tank" - desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" - icon = 'icons/obj/objects.dmi' - icon_state = "oiltank" - amount_per_transfer_from_this = 120 - -/obj/structure/reagent_dispensers/cookingoil/New() - ..() - reagents.add_reagent("cornoil",5000) - -/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - explode() - -/obj/structure/reagent_dispensers/cookingoil/ex_act() - explode() - -/obj/structure/reagent_dispensers/cookingoil/proc/explode() - reagents.splash_area(get_turf(src), 3) - visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) - qdel(src) - -/obj/structure/reagent_dispensers/he3 - name = "fueltank" - desc = "A fueltank." - icon = 'icons/obj/objects.dmi' - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispenser/he3/Initialize() - ..() - reagents.add_reagent("helium3",1000) -======= -/obj/structure/reagent_dispensers - name = "Dispenser" - desc = "..." - icon = 'icons/obj/objects.dmi' - icon_state = "watertank" - layer = TABLE_LAYER - density = TRUE - anchored = FALSE - pressure_resistance = 2*ONE_ATMOSPHERE - - var/obj/item/hose_connector/input/active/InputSocket - var/obj/item/hose_connector/output/active/OutputSocket - - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = list(10,25,50,100) - -/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) - return - -/obj/structure/reagent_dispensers/Destroy() - QDEL_NULL(InputSocket) - QDEL_NULL(OutputSocket) - - ..() - -/obj/structure/reagent_dispensers/Initialize() - var/datum/reagents/R = new/datum/reagents(5000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - - InputSocket = new(src) - InputSocket.carrier = src - OutputSocket = new(src) - OutputSocket.carrier = src - - . = ..() - -/obj/structure/reagent_dispensers/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - . += "It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - . += "[R.volume] units of [R.name]" - else - . += "Nothing." - -/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - var/N = tgui_input_list(usr, "Amount per transfer from this:","[src]", possible_transfer_amounts) - if (N) - amount_per_transfer_from_this = N - -/obj/structure/reagent_dispensers/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return - -/obj/structure/reagent_dispensers/blob_act() - qdel(src) - - - -//Dispensers -/obj/structure/reagent_dispensers/watertank - name = "watertank" - desc = "A watertank." - icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit - icon_state = "watertank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/watertank/Initialize() - . = ..() - reagents.add_reagent("water", 1000) - -/obj/structure/reagent_dispensers/watertank/high - name = "high-capacity water tank" - desc = "A highly-pressurized water tank made to hold vast amounts of water.." - icon_state = "watertank_high" - -/obj/structure/reagent_dispensers/watertank/high/Initialize() - . = ..() - reagents.add_reagent("water", 4000) - -/obj/structure/reagent_dispensers/fueltank - name = "fueltank" - desc = "A fueltank." - icon = 'icons/obj/objects_vr.dmi' //VOREStation Edit - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/obj/item/device/assembly_holder/rig = null - -/obj/structure/reagent_dispensers/fueltank/Initialize() - . = ..() - reagents.add_reagent("fuel",1000) - -//VOREStation Add -/obj/structure/reagent_dispensers/fueltank/high - name = "high-capacity fuel tank" - desc = "A highly-pressurized fuel tank made to hold vast amounts of fuel." - icon_state = "weldtank_high" - -/obj/structure/reagent_dispensers/fueltank/high/Initialize() - . = ..() - reagents.add_reagent("fuel",4000) - -/obj/structure/reagent_dispensers/foam - name = "foamtank" - desc = "A foam tank." - icon = 'icons/obj/objects_vr.dmi' - icon_state = "foamtank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/foam/Initialize() - . = ..() - reagents.add_reagent("firefoam",1000) - -/obj/structure/reagent_dispensers/fueltank/barrel - name = "hazardous barrel" - desc = "An open-topped barrel full of nasty-looking liquid." - icon_state = "barrel" - modded = TRUE - -/obj/structure/reagent_dispensers/fueltank/barrel/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (W.is_wrench()) //can't wrench it shut, it's always open - return - return ..() -//VOREStation Add End - -/obj/structure/reagent_dispensers/fueltank/examine(mob/user) - . = ..() - if(get_dist(user, src) <= 2) - if(modded) - . += "Fuel faucet is wrenched open, leaking the fuel!" - if(rig) - . += "There is some kind of device rigged to the tank." - -/obj/structure/reagent_dispensers/fueltank/attack_hand() - if (rig) - usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") - if(do_after(usr, 20)) - usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]") - rig.loc = get_turf(usr) - rig = null - overlays = new/list() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (W.is_wrench()) - user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ - "You wrench [src]'s faucet [modded ? "closed" : "open"]") - modded = modded ? 0 : 1 - playsound(src, W.usesound, 75, 1) - if (modded) - message_admins("[key_name_admin(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel. (JMP)") - log_game("[key_name(user)] opened fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]), leaking fuel.") - leak_fuel(amount_per_transfer_from_this) - if (istype(W,/obj/item/device/assembly_holder)) - if (rig) - to_chat(user, "There is another device in the way.") - return ..() - user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") - if(do_after(user, 20)) - user.visible_message("[user] rigs [W] to \the [src].", "You rig [W] to \the [src]") - - var/obj/item/device/assembly_holder/H = W - if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) - message_admins("[key_name_admin(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion. (JMP)") - log_game("[key_name(user)] rigged fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) for explosion.") - - rig = W - user.drop_item() - W.loc = src - - var/icon/test = getFlatIcon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) - add_overlay(test) - - return ..() - - -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - if(istype(Proj.firer)) - message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") - log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") - - if(!istype(Proj ,/obj/item/projectile/beam/lasertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() - -/obj/structure/reagent_dispensers/fueltank/ex_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/blob_act() - explode() - -/obj/structure/reagent_dispensers/fueltank/proc/explode() - if (reagents.total_volume > 500) - explosion(src.loc,1,2,4) - else if (reagents.total_volume > 100) - explosion(src.loc,0,1,3) - else if (reagents.total_volume > 50) - explosion(src.loc,-1,1,2) - if(src) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) - if (modded) - explode() - else if (temperature > T0C+500) - explode() - return ..() - -/obj/structure/reagent_dispensers/fueltank/Move() - if (..() && modded) - leak_fuel(amount_per_transfer_from_this/10.0) - -/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) - if (reagents.total_volume == 0) - return - - amount = min(amount, reagents.total_volume) - reagents.remove_reagent("fuel",amount) - new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) - -/obj/structure/reagent_dispensers/peppertank - name = "Pepper Spray Refiller" - desc = "Refills pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 45 - -/obj/structure/reagent_dispensers/peppertank/Initialize() - . = ..() - reagents.add_reagent("condensedcapsaicin",1000) - - -/obj/structure/reagent_dispensers/water_cooler - name = "Water-Cooler" - desc = "A machine that dispenses water to drink." - amount_per_transfer_from_this = 5 - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - possible_transfer_amounts = null - anchored = TRUE - var/bottle = 0 - var/cups = 0 - var/cupholder = 0 - -/obj/structure/reagent_dispensers/water_cooler/full - bottle = 1 - cupholder = 1 - cups = 10 - -/obj/structure/reagent_dispensers/water_cooler/Initialize() - . = ..() - if(bottle) - reagents.add_reagent("water",120) - update_icon() - -/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) - . = ..() - if(cupholder) - . += "There are [cups] cups in the cup dispenser." - -/obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() - set name = "Rotate Cooler Clockwise" - set category = "Object" - set src in oview(1) - - if (src.anchored || usr:stat) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.set_dir(turn(src.dir, 270)) - return 1 - -/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) - if(I.is_wrench()) - src.add_fingerprint(user) - if(bottle) - playsound(src, I.usesound, 50, 1) - if(do_after(user, 20) && bottle) - to_chat(user, "You unfasten the jug.") - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) - for(var/datum/reagent/R in reagents.reagent_list) - var/total_reagent = reagents.get_reagent_amount(R.id) - G.reagents.add_reagent(R.id, total_reagent) - reagents.clear_reagents() - bottle = 0 - update_icon() - else - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, 20 * I.toolspeed, src)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - playsound(src, I.usesound, 50, 1) - return - - if(I.is_screwdriver()) - if(cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You take the cup dispenser off.") - new /obj/item/stack/material/plastic( src.loc ) - if(cups) - for(var/i = 0 to cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups = 0 - cupholder = 0 - update_icon() - return - if(!bottle && !cupholder) - playsound(src, I.usesound, 50, 1) - to_chat(user, "You start taking the water-cooler apart.") - if(do_after(user, 20 * I.toolspeed) && !bottle && !cupholder) - to_chat(user, "You take the water-cooler apart.") - new /obj/item/stack/material/plastic( src.loc, 4 ) - qdel(src) - return - - if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) - src.add_fingerprint(user) - if(!bottle) - if(anchored) - var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I - to_chat(user, "You start to screw the bottle onto the water-cooler.") - if(do_after(user, 20) && !bottle && anchored) - bottle = 1 - update_icon() - to_chat(user, "You screw the bottle onto the water-cooler!") - for(var/datum/reagent/R in G.reagents.reagent_list) - var/total_reagent = G.reagents.get_reagent_amount(R.id) - reagents.add_reagent(R.id, total_reagent) - qdel(G) - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a bottle there!") - return 1 - - if(istype(I, /obj/item/stack/material/plastic)) - if(!cupholder) - if(anchored) - var/obj/item/stack/material/plastic/P = I - src.add_fingerprint(user) - to_chat(user, "You start to attach a cup dispenser onto the water-cooler.") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20) && !cupholder && anchored) - if (P.use(1)) - to_chat(user, "You attach a cup dispenser onto the water-cooler.") - cupholder = 1 - update_icon() - else - to_chat(user, "You need to wrench down the cooler first.") - else - to_chat(user, "There is already a cup dispenser there!") - return - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/user) - if(cups) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src.loc) - cups-- - flick("[icon_state]-vend", src) - return - -/obj/structure/reagent_dispensers/water_cooler/update_icon() - icon_state = "water_cooler" - cut_overlays() - if(bottle) - add_overlay("water_cooler_bottle") - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg." - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/beerkeg/Initialize() - . = ..() - reagents.add_reagent("beer",1000) - -/obj/structure/reagent_dispensers/beerkeg/fakenuke - name = "nuclear beer keg" - desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nuclearbomb0" - -/obj/structure/reagent_dispensers/virusfood - name = "Virus Food Dispenser" - desc = "A dispenser of virus food. Yum." - icon = 'icons/obj/objects.dmi' - icon_state = "virusfoodtank" - amount_per_transfer_from_this = 10 - anchored = TRUE - -/obj/structure/reagent_dispensers/virusfood/Initialize() - . = ..() - reagents.add_reagent("virusfood", 1000) - -/obj/structure/reagent_dispensers/acid - name = "Sulphuric Acid Dispenser" - desc = "A dispenser of acid for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "acidtank" - amount_per_transfer_from_this = 10 - anchored = TRUE - -/obj/structure/reagent_dispensers/acid/Initialize() - . = ..() - reagents.add_reagent("sacid", 1000) - -//Cooking oil refill tank -/obj/structure/reagent_dispensers/cookingoil - name = "cooking oil tank" - desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" - icon = 'icons/obj/objects.dmi' - icon_state = "oiltank" - amount_per_transfer_from_this = 120 - -/obj/structure/reagent_dispensers/cookingoil/New() - ..() - reagents.add_reagent("cornoil",5000) - -/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - explode() - -/obj/structure/reagent_dispensers/cookingoil/ex_act() - explode() - -/obj/structure/reagent_dispensers/cookingoil/proc/explode() - reagents.splash_area(get_turf(src), 3) - visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) - qdel(src) - -/obj/structure/reagent_dispensers/he3 - name = "fueltank" - desc = "A fueltank." - icon = 'icons/obj/objects.dmi' - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispenser/he3/Initialize() - ..() - reagents.add_reagent("helium3",1000) ->>>>>>> 577b986ba6... Convert some bools to TRUE/FALSE instead of 1/0. (#11100)