diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm
index fe15b19a5ec..2463784e3d2 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm
@@ -78066,6 +78066,7 @@
/obj/structure/sign/nosmoking_2{
pixel_y = 32
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
dir = 5;
icon_state = "warning"
@@ -80505,6 +80506,7 @@
/obj/machinery/light_switch{
pixel_y = -23
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
dir = 10;
icon_state = "warning"
@@ -100478,16 +100480,13 @@
},
/area/crew_quarters/kitchen)
"dfs" = (
-/obj/structure/chair/stool,
-/turf/open/floor/wood,
-/area/maintenance/aft{
- name = "Aft Maintenance"
- })
+/obj/machinery/portable_atmospherics/canister/air,
+/turf/open/floor/plasteel,
+/area/atmos)
"dft" = (
-/turf/open/floor/wood,
-/area/maintenance/aft{
- name = "Aft Maintenance"
- })
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plasteel,
+/area/atmos)
"dfu" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
@@ -100506,10 +100505,9 @@
},
/area/medical/morgue)
"dfw" = (
-/turf/open/floor/plasteel{
- icon_state = "dark"
- },
-/area/medical/morgue)
+/obj/machinery/portable_atmospherics/canister/bz,
+/turf/open/floor/plasteel,
+/area/atmos)
"dfx" = (
/obj/machinery/plantgenes,
/turf/open/floor/plasteel{
@@ -140587,8 +140585,8 @@ bFT
bHN
bJw
bKQ
-bzf
-bOj
+dfs
+atw
atn
bRw
bTc
@@ -140844,8 +140842,8 @@ bEn
bHO
bJx
bKR
-bzf
-bOk
+dft
+atw
apk
bRx
apk
@@ -141101,8 +141099,8 @@ bFU
bHP
bJy
bKS
-bzf
-cXn
+dfw
+atw
apk
bRy
apk
@@ -141358,8 +141356,8 @@ bEn
bHQ
bJz
bKT
-bzf
-bOl
+dfw
+atw
bQa
bRz
bTd
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index 93ee4f95305..f01ad803ea9 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -40861,6 +40861,7 @@
/obj/machinery/light/small{
dir = 8
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -41603,6 +41604,7 @@
dir = 4;
network = list("SS13","RD")
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel{
icon_state = "floorgrime"
},
@@ -45105,6 +45107,7 @@
name = "Station Intercom (General)";
pixel_x = -30
},
+/obj/machinery/portable_atmospherics/canister/bz,
/turf/open/floor/plasteel,
/area/atmos)
"bNQ" = (
@@ -64066,8 +64069,12 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"cAK" = (
-/turf/open/floor/plating,
-/area/maintenance/asmaint2)
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/bz,
+/turf/open/floor/plasteel,
+/area/atmos)
"cAL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/mob/living/simple_animal/hostile/lizard{
@@ -94956,7 +94963,7 @@ bJs
bKy
bLM
bLM
-bNQ
+cAK
bOV
bQk
bRt
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 7b1fa5d630e..5c27c11f2fa 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -278,6 +278,7 @@ MASS SPECTROMETER
var/n2_concentration = env_gases["n2"][MOLES]/total_moles
var/co2_concentration = env_gases["co2"][MOLES]/total_moles
var/plasma_concentration = env_gases["plasma"][MOLES]/total_moles
+ var/bz_concentration = env_gases["bz"][MOLES]/total_moles
environment.garbage_collect()
if(abs(n2_concentration - N2STANDARD) < 20)
@@ -300,6 +301,12 @@ MASS SPECTROMETER
else
user << "Plasma: [round(plasma_concentration*100, 0.01)] %"
+ if(bz_concentration > 0.005)
+ user << "Hallucinogen: [round(plasma_concentration*100, 0.01)] %"
+ else
+ user << "Hallucinogen: [round(plasma_concentration*100, 0.01)] %"
+
+
for(var/id in env_gases)
if(id in hardcoded_gases)
continue
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index 76a7c851fe2..7dede5b10ef 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -15,8 +15,7 @@
usr << "@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]"
for(var/id in GM_gases)
- if(id in hardcoded_gases || GM_gases[id][MOLES])
- usr << "[GM_gases[id][GAS_META][META_GAS_NAME]]: [GM_gases[id][MOLES]]"
+ usr << "[GM_gases[id][GAS_META][META_GAS_NAME]]: [GM_gases[id][MOLES]]"
feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/fix_next_move()
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index c1ca56c5ae5..bba79f6b5f7 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -7,7 +7,7 @@
var/volume_rate = 1000
volume = 1000
- var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b")
+ var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b", "bz")
/obj/machinery/portable_atmospherics/scrubber/Destroy()
var/turf/T = get_turf(src)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index bb5376c35a8..d16cb0a66e2 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -74,6 +74,7 @@
var/safe_toxins_max = 0.05
var/SA_para_min = 1 //Sleeping agent
var/SA_sleep_min = 5 //Sleeping agent
+ var/BZ_trip_balls_min = 1 //BZ gas.
//Breath damage
var/oxy_breath_dam_min = 1
@@ -1113,7 +1114,7 @@
var/list/breath_gases = breath.gases
- breath.assert_gases("o2", "plasma", "co2", "n2o")
+ breath.assert_gases("o2", "plasma", "co2", "n2o", "bz")
//Partial pressures in our breath
var/O2_pp = breath.get_breath_partial_pressure(breath_gases["o2"][MOLES])
@@ -1220,6 +1221,9 @@
//-- TRACES --//
if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here.
+
+ // N2O
+
var/SA_pp = breath.get_breath_partial_pressure(breath_gases["n2o"][MOLES])
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
@@ -1231,6 +1235,16 @@
handle_breath_temperature(breath, H)
breath.garbage_collect()
+ // BZ
+
+ var/bz_pp = breath.get_breath_partial_pressure(breath_gases["bz"][MOLES])
+ if(bz_pp > BZ_trip_balls_min)
+ H.hallucination += 20
+ if(prob(33))
+ H.adjustBrainLoss(3)
+ else if(bz_pp > 0.01)
+ H.hallucination += 5//Removed at 2 per tick so this will slowly build up
+
return 1
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 2fe0977cb2d..1ed61bce964 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -123,7 +123,7 @@
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
var/list/breath_gases = breath.gases
- breath.assert_gases("o2","plasma","co2","n2o")
+ breath.assert_gases("o2","plasma","co2","n2o", "bz")
var/O2_partialpressure = (breath_gases["o2"][MOLES]/breath.total_moles())*breath_pressure
var/Toxins_partialpressure = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure