diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 4fd1669771..0e4f0f3a6e 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -23,8 +23,9 @@
#define AI_DETECT_HUD "19"
#define NANITE_HUD "20"
#define DIAG_NANITE_FULL_HUD "21"
+#define RAD_HUD "22" //radation alerts for medical huds
//for antag huds. these are used at the /mob level
-#define ANTAG_HUD "22"
+#define ANTAG_HUD "23"
//by default everything in the hud_list of an atom is an image
//a value in hud_list with one of these will change that behavior
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 8506a4133a..65a7c6a954 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -18,7 +18,7 @@
/datum/atom_hud/data
/datum/atom_hud/data/human/medical
- hud_icons = list(STATUS_HUD, HEALTH_HUD, NANITE_HUD)
+ hud_icons = list(STATUS_HUD, HEALTH_HUD, NANITE_HUD, RAD_HUD)
/datum/atom_hud/data/human/medical/basic
@@ -162,6 +162,7 @@
holder.icon_state = "hud[RoundHealth(src)]"
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
+ med_hud_set_radstatus()
//for carbon suit sensors
/mob/living/carbon/med_hud_set_health()
@@ -211,6 +212,22 @@
holder.icon_state = "hudhealthy"
+/mob/living/proc/med_hud_set_radstatus()
+ var/image/radholder = hud_list[RAD_HUD]
+ var/icon/I = icon(icon, icon_state, dir)
+ radholder.pixel_y = I.Height() - world.icon_size
+ var/mob/living/M = src
+ var/rads = M.radiation
+ switch(rads)
+ if(-INFINITY to RAD_MOB_SAFE)
+ radholder.icon_state = "hudradsafe"
+ if((RAD_MOB_SAFE+1) to RAD_MOB_MUTATE)
+ radholder.icon_state = "hudraddanger"
+ if((RAD_MOB_MUTATE+1) to RAD_MOB_VOMIT)
+ radholder.icon_state = "hudradlethal"
+ if((RAD_MOB_VOMIT+1) to INFINITY)
+ radholder.icon_state = "hudradnuke"
+
/***********************************************
Security HUDs! Basic mode shows only the job.
************************************************/
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 90166dacf0..d27357d654 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -210,13 +210,13 @@
add_fingerprint(user)
/obj/machinery/suit_storage_unit/proc/cook()
+ var/mob/living/mob_occupant = occupant
if(uv_cycles)
uv_cycles--
uv = TRUE
locked = TRUE
update_icon()
if(occupant)
- var/mob/living/mob_occupant = occupant
if(uv_super)
mob_occupant.adjustFireLoss(rand(20, 36))
else
@@ -246,9 +246,25 @@
else
visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.")
playsound(src, 'sound/machines/airlockclose.ogg', 25, 1)
- for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
- SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG)
- var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive)
+ var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such.
+ if(suit)
+ things_to_clear += suit
+ things_to_clear += suit.GetAllContents()
+ if(helmet)
+ things_to_clear += helmet
+ things_to_clear += helmet.GetAllContents()
+ if(mask)
+ things_to_clear += mask
+ things_to_clear += mask.GetAllContents()
+ if(storage)
+ things_to_clear += storage
+ things_to_clear += storage.GetAllContents()
+ if(occupant)
+ things_to_clear += occupant
+ things_to_clear += occupant.GetAllContents()
+ for(var/atom/movable/AM in things_to_clear) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
+ SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG)
+ var/datum/component/radioactive/contamination = AM.GetComponent(/datum/component/radioactive)
if(contamination)
qdel(contamination)
open_machine(FALSE)
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index 38133e37bc..90cdd0386c 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -158,7 +158,7 @@
if(!M.radiation)
to_chat(user, "[icon2html(src, user)] Radiation levels within normal boundaries.")
else
- to_chat(user, "[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation].")
+ to_chat(user, "[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation] rad.")
if(rad_strength)
to_chat(user, "[icon2html(src, user)] Target contains radioactive contamination. Radioactive strength: [rad_strength]")
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 0059938720..e0d3e7a8a0 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -215,8 +215,7 @@ SLIME SCANNER
msg += "\tBrain Activity Level: [(200 - M.getBrainLoss())/2]%.\n"
if(M.radiation)
msg += "\tSubject is irradiated.\n"
- if(advanced)
- msg += "\tRadiation Level: [M.radiation]%.\n"
+ msg += "\tRadiation Level: [M.radiation] rad\n"
if(advanced && M.hallucinating())
msg += "\tSubject is hallucinating.\n"
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index b5d7282b07..6532e9f7a5 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -46,6 +46,7 @@
item_flags = NO_MAT_REDEMPTION
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/holding/satchel
name = "satchel of holding"
@@ -53,6 +54,7 @@
icon_state = "holdingsat"
item_state = "holdingsat"
species_exception = list(/datum/species/angel)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/holding/ComponentInitialize()
. = ..()
@@ -81,6 +83,7 @@
icon_state = "giftbag0"
item_state = "giftbag"
w_class = WEIGHT_CLASS_BULKY
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/santabag/ComponentInitialize()
. = ..()
@@ -133,6 +136,8 @@
desc = "It's a special backpack made exclusively for Nanotrasen officers."
icon_state = "captainpack"
item_state = "captainpack"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/industrial
name = "industrial backpack"
@@ -140,6 +145,7 @@
icon_state = "engiepack"
item_state = "engiepack"
resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/botany
name = "botany backpack"
@@ -194,6 +200,8 @@
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
item_state = "engiepack"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/satchel/med
name = "medical satchel"
@@ -261,6 +269,8 @@
desc = "An exclusive satchel for Nanotrasen officers."
icon_state = "satchel-cap"
item_state = "captainpack"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/satchel/flat
name = "smuggler's satchel"
@@ -385,6 +395,8 @@
desc = "A large duffel bag for holding extra tools and supplies."
icon_state = "duffel-eng"
item_state = "duffel-eng"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/duffelbag/durathread
name = "durathread duffel bag"
@@ -400,6 +412,7 @@
icon_state = "duffel-drone"
item_state = "duffel-drone"
resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/screwdriver(src)
@@ -427,6 +440,7 @@
icon_state = "duffel-syndie"
item_state = "duffel-syndieammo"
slowdown = 0
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/duffelbag/syndie/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index e4debeff49..232d1bd5c9 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -81,6 +81,7 @@
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
item_flags = NO_MAT_REDEMPTION
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/bag/trash/bluespace/ComponentInitialize()
. = ..()
@@ -105,6 +106,7 @@
component_type = /datum/component/storage/concrete/stack
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
var/datum/component/mobhook
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/bag/ore/ComponentInitialize()
. = ..()
@@ -391,6 +393,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bspace_biobag"
desc = "A bag for the safe transportation and disposal of biowaste and other biological materials."
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/bag/bio/holding/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 4495e9da14..3fe4abeeec 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -40,6 +40,7 @@
icon_state = "utilitybelt"
item_state = "utility"
content_overlays = TRUE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //because this is easier than trying to have showers wash all contents.
/obj/item/storage/belt/utility/ComponentInitialize()
. = ..()
@@ -344,6 +345,7 @@
desc = "A set of tactical webbing worn by Syndicate boarding parties."
icon_state = "militarywebbing"
item_state = "militarywebbing"
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/belt/military/ComponentInitialize()
. = ..()
@@ -530,6 +532,7 @@
desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic."
icon_state = "soulstonebelt"
item_state = "soulstonebelt"
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/belt/wands/ComponentInitialize()
. = ..()
@@ -599,7 +602,7 @@
icon_state = "bandolier-durathread"
item_state = "bandolier-durathread"
resistance_flags = FIRE_PROOF
-
+
/obj/item/storage/belt/bandolier/durathread/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 903c319644..dd6a6b8453 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -33,6 +33,7 @@
resistance_flags = FLAMMABLE
var/foldable = /obj/item/stack/sheet/cardboard
var/illustration = "writing"
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
/obj/item/storage/box/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 5b99bb85bf..d18212be42 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -19,6 +19,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
var/latches = "single_latch"
var/has_latches = TRUE
var/can_rubberify = TRUE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //very protecc too
/obj/item/storage/toolbox/Initialize(mapload)
. = ..()
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 662a91c80c..57866b5131 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -22,6 +22,7 @@
resistance_flags = NONE
dog_fashion = null
mutantrace_variation = MUTANTRACE_VARIATION
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/clothing/suit/space
name = "space suit"
@@ -44,4 +45,5 @@
strip_delay = 80
equip_delay_other = 80
resistance_flags = NONE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //rated for cosmic radation :honk:
tauric = TRUE //Citadel Add for tauric hardsuits
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index d003a20167..fbdca6ddbc 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -130,7 +130,7 @@
equip_delay_other = 60
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
resistance_flags = NONE
- rad_flags = RAD_PROTECT_CONTENTS
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
mutantrace_variation = MUTANTRACE_VARIATION
/obj/item/clothing/suit/radiation
@@ -150,5 +150,5 @@
equip_delay_other = 60
flags_inv = HIDEJUMPSUIT|HIDETAUR
resistance_flags = NONE
- rad_flags = RAD_PROTECT_CONTENTS
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
tauric = TRUE //Citadel Add for tauric hardsuits
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 794194b3a1..41daf642f2 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -2,7 +2,7 @@
gender = MALE
pressure_resistance = 15
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,RAD_HUD)
has_limbs = 1
held_items = list(null, null)
var/list/stomach_contents = list()
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 2425fcf14d..e32d073500 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/human
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,RAD_HUD)
hud_type = /datum/hud/human
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
pressure_resistance = 25
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index a38eee9442..4d2a36907d 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -2,7 +2,7 @@
see_invisible = SEE_INVISIBLE_LIVING
sight = 0
see_in_dark = 2
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,RAD_HUD)
pressure_resistance = 10
var/resize = 1 //Badminnery resize
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index af004c4701..3cd296f866 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -13,6 +13,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
var/works_from_distance = FALSE
var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/rped.ogg'
var/alt_sound = null
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //cutting down on exploits
/obj/item/storage/part_replacer/pre_attack(obj/machinery/T, mob/living/user, params)
if(!istype(T) || !T.component_parts)
@@ -67,6 +68,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
icon = 'icons/obj/stock_parts.dmi'
w_class = WEIGHT_CLASS_SMALL
var/rating = 1
+ rad_flags = RAD_NO_CONTAMINATE
/obj/item/stock_parts/Initialize()
. = ..()
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 10474f94da..164fabe806 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ