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 37207ba5ecd..72caea5c2e7 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -197,9 +197,134 @@
name = "roller bed"
icon = 'icons/obj/rollerbed.dmi'
icon_state = "standard_down"
+ anchored = FALSE
var/base_state = "standard"
var/item_bedpath = /obj/item/roller
- anchored = 0
+ var/obj/item/reagent_containers/beaker
+ var/iv_attached = 0
+ var/iv_stand = TRUE
+
+/obj/structure/bed/roller/update_icon()
+ overlays.Cut()
+ if(density)
+ icon_state = "[base_state]_up"
+ else
+ icon_state = "[base_state]_down"
+ if(beaker)
+ var/image/iv = image(icon, "iv[iv_attached]")
+ var/percentage = round((beaker.reagents.total_volume / beaker.volume) * 100, 25)
+ var/image/filling = image(icon, "iv_filling[percentage]")
+ filling.color = beaker.reagents.get_color()
+ iv.overlays += filling
+ if(percentage < 25)
+ iv.overlays += image(icon, "light_low")
+ if(density)
+ iv.pixel_y = 6
+ overlays += iv
+
+/obj/structure/bed/roller/attackby(obj/item/I, mob/user)
+ if(iswrench(I) || istype(I, /obj/item/stack) || iswirecutter(I))
+ return 1
+ if(iv_stand && !beaker && istype(I, /obj/item/reagent_containers))
+ if(!user.unEquip(I, target = src))
+ return
+ to_chat(user, SPAN_NOTICE("You attach \the [I] to \the [src]."))
+ beaker = I
+ update_icon()
+ return 1
+ ..()
+
+/obj/structure/bed/roller/attack_hand(mob/living/user)
+ if(beaker && !buckled_mob)
+ remove_beaker(user)
+ else
+ ..()
+
+/obj/structure/bed/roller/proc/collapse()
+ visible_message("[usr] collapses \the [src].")
+ new item_bedpath(get_turf(src))
+ qdel(src)
+
+/obj/structure/bed/roller/process()
+ if(!iv_attached || !buckled_mob || !beaker)
+ return PROCESS_KILL
+
+ if(SSprocessing.times_fired % 2)
+ return
+
+ if(beaker.volume > 0)
+ beaker.reagents.trans_to_mob(buckled_mob, beaker.amount_per_transfer_from_this, CHEM_BLOOD)
+ update_icon()
+
+/obj/structure/bed/roller/proc/remove_beaker(mob/user)
+ to_chat(user, SPAN_NOTICE("You detach \the [beaker] from \the [src]."))
+ iv_attached = FALSE
+ beaker.dropInto(loc)
+ beaker = null
+ update_icon()
+
+/obj/structure/bed/roller/proc/attach_iv(mob/living/carbon/human/target, mob/user)
+ if(!beaker)
+ return
+ if(do_mob(user, target, 1 SECOND))
+ visible_message("[user] attaches [target] to the IV on \the [src].")
+ iv_attached = TRUE
+ update_icon()
+ START_PROCESSING(SSprocessing, src)
+
+/obj/structure/bed/roller/proc/detach_iv(mob/living/carbon/human/target, mob/user)
+ visible_message("[user] takes [target] off the IV on \the [src].")
+ iv_attached = FALSE
+ update_icon()
+ STOP_PROCESSING(SSprocessing, src)
+
+/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location)
+ ..()
+ if(use_check(usr) || !Adjacent(usr))
+ return
+ if(!(ishuman(usr) || isrobot(usr)))
+ return
+ if(over_object == buckled_mob && beaker)
+ if(iv_attached)
+ detach_iv(buckled_mob, usr)
+ else
+ attach_iv(buckled_mob, usr)
+ return
+ if(ishuman(over_object))
+ if(user_buckle_mob(over_object, usr))
+ attach_iv(buckled_mob, usr)
+ return
+ if(beaker)
+ remove_beaker(usr)
+ return
+ if(buckled_mob)
+ return
+ collapse()
+
+/obj/structure/bed/roller/Move()
+ ..()
+ if(makes_rolling_sound)
+ playsound(src, 'sound/effects/roll.ogg', 100, 1)
+ if(buckled_mob)
+ if(buckled_mob.buckled == src)
+ buckled_mob.forceMove(src.loc)
+ else
+ buckled_mob = null
+
+/obj/structure/bed/roller/post_buckle_mob(mob/living/M)
+ . = ..()
+ if(M == buckled_mob)
+ density = TRUE
+ M.pixel_y = 6
+ M.old_y = 6
+ update_icon()
+ else
+ density = FALSE
+ M.pixel_y = 0
+ M.old_y = 0
+ if(iv_attached)
+ detach_iv(M, usr)
+ update_icon()
/obj/structure/bed/roller/hover
name = "medical hoverbed"
@@ -212,23 +337,6 @@
.=..()
set_light(2,1,LIGHT_COLOR_CYAN)
-/obj/structure/bed/roller/update_icon()
- return // Doesn't care about material or anything else.
-
-/obj/structure/bed/roller/attackby(obj/item/W as obj, mob/user as mob)
- if(W.iswrench() || istype(W,/obj/item/stack) || W.iswirecutter())
- return
- else if(istype(W,/obj/item/roller_holder))
- if(buckled_mob)
- user_unbuckle_mob(user)
- else
- visible_message("[user] collapses \the [src.name].")
- new/obj/item/roller(get_turf(src))
- spawn(0)
- qdel(src)
- return
- ..()
-
/obj/item/roller
name = "roller bed"
desc = "A collapsed roller bed that can be carried around."
@@ -285,39 +393,3 @@
R.add_fingerprint(user)
qdel(held)
held = null
-
-
-/obj/structure/bed/roller/Move()
- ..()
- if(makes_rolling_sound)
- playsound(src, 'sound/effects/roll.ogg', 100, 1)
- if(buckled_mob)
- if(buckled_mob.buckled == src)
- buckled_mob.forceMove(src.loc)
- else
- buckled_mob = null
-
-/obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob)
- if(M == buckled_mob)
- M.pixel_y = 6
- M.old_y = 6
- density = 1
- icon_state = "[base_state]_up"
- else
- M.pixel_y = 0
- M.old_y = 0
- density = 0
- icon_state = "[base_state]_down"
-
- return ..()
-
-/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location)
- ..()
- if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
- if(!ishuman(usr)) return
- if(buckled_mob) return 0
- visible_message("[usr] collapses \the [src.name].")
- new item_bedpath(get_turf(src))
- spawn(0)
- qdel(src)
- return
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 4c881b78e83..4cb9c78ec7a 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -18,7 +18,6 @@
var/obj/item/organ/internal/parasite/P = M.internal_organs_by_name["blackkois"]
if((alien == IS_VAURCA) || (istype(P) && P.stage >= 3))
M.heal_organ_damage(1.2 * removed, 1.2 * removed)
- M.adjustToxLoss(-1.2 * removed)
M.adjustNutritionLoss(-nutriment_factor * removed)
M.add_chemical_effect(CE_BLOODRESTORE, 6 * removed)
@@ -833,11 +832,6 @@
glass_name = "glass of lime juice"
glass_desc = "A glass of sweet-sour lime juice"
-/datum/reagent/drink/limejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
- if(alien != IS_DIONA)
- M.adjustToxLoss(-0.5 * removed)
-
/datum/reagent/drink/orangejuice
name = "Orange juice"
id = "orangejuice"
@@ -972,14 +966,6 @@
glass_name = "glass of dyn juice"
glass_desc = "Juice from a dyn leaf. Good for you, but normally not consumed undiluted."
-/datum/reagent/drink/dynjuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
- M.adjustToxLoss(-0.3 * removed)
-
-
-/datum/reagent/drink/dynjuice/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- M.adjustToxLoss(-0.3 * removed)
-
/datum/reagent/drink/dynjuice/hot
name = "Dyn Tea"
id = "dynhot"
@@ -1092,11 +1078,6 @@
var/last_taste_time = -100
-/datum/reagent/drink/tea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
- M.adjustToxLoss(-0.1 * removed)
-
-
/datum/reagent/drink/tea/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
if(last_taste_time + 800 < world.time) // Not to spam message
@@ -1104,8 +1085,6 @@
last_taste_time = world.time
metabolism = REM * 0.33
M.adjustToxLoss(1.5 * removed)
- else
- M.adjustToxLoss(-0.1 * removed)
/datum/reagent/drink/tea/icetea
name = "Iced Tea"
@@ -1955,7 +1934,6 @@
if(alien != IS_DIONA)
M.adjustOxyLoss(-4 * removed)
M.heal_organ_damage(2 * removed, 2 * removed)
- M.adjustToxLoss(-2 * removed)
if(M.dizziness)
M.dizziness = max(0, M.dizziness - 15)
if(M.confused)
@@ -2151,11 +2129,6 @@
var/last_taste_time = -100
-/datum/reagent/drink/toothpaste/teathpaste/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) //contains tea. Gotta get those tea effects.
- ..()
- M.adjustToxLoss(-0.1 * removed)
-
-
/datum/reagent/drink/toothpaste/teathpaste/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
if(last_taste_time + 800 < world.time) // Not to spam message
@@ -2163,8 +2136,6 @@
last_taste_time = world.time
metabolism = REM * 0.33
M.adjustToxLoss(1.5 * removed)
- else
- M.adjustToxLoss(-0.1 * removed)
/* Alcohol */
@@ -4462,11 +4433,6 @@
var/last_taste_time = -100
-/datum/reagent/alcohol/butanol/trizkizki_tea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) //contains tea. Gotta get those tea effects.
- ..()
- M.adjustToxLoss(-0.1 * removed)
-
-
/datum/reagent/alcohol/butanol/trizkizki_tea/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
if(last_taste_time + 800 < world.time) // Not to spam message
@@ -4474,8 +4440,6 @@
last_taste_time = world.time
metabolism = REM * 0.33
M.adjustToxLoss(1.5 * removed)
- else
- M.adjustToxLoss(-0.1 * removed)
//ZZZZOOOODDDDAAAAA
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index ac1f68ad49d..bbad9f96c81 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -12,16 +12,11 @@
breathe_mul = 0.5
scannable = 1
taste_description = "bitterness"
- var/datum/modifier/modifier
/datum/reagent/norepinephrine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_STABLE)
M.add_chemical_effect(CE_PAINKILLER, 25)
-/datum/reagent/norepinephrine/Destroy()
- QDEL_NULL(modifier)
- return ..()
-
/datum/reagent/bicaridine
name = "Bicaridine"
id = "bicaridine"
@@ -163,31 +158,7 @@
var/power = 1 + Clamp((get_temperature() - (T0C + 20))*0.1,-0.5,0.5)
//Heals 10% more brute and less burn for every 1 celcius above 20 celcius, up 50% more/less.
//Heals 10% more burn and less brute for every 1 celcius below 20 celcius, up to 50% more/less.
- M.adjustOxyLoss(-6 * removed)
M.heal_organ_damage(3 * removed * power,3 * removed * power)
- M.adjustToxLoss(-3 * removed)
-
-/datum/reagent/atropine
- name = "Atropine"
- id = "atropine"
- description = "Atropine is an emergency stabilizing reagent designed to heal suffocation, blunt trauma, and burns in critical condition. Side effects include toxins increase, muscle weakness, and increased heartrate."
- reagent_state = LIQUID
- metabolism = 1
- color = "#FF40FF"
- scannable = 1
- taste_description = "bitterness"
- breathe_mul = 0
-
-/datum/reagent/atropine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- var/reagent_strength = Clamp(1 - (M.health/100),0.1,2)
- M.adjustOxyLoss(-8 * removed * reagent_strength)
- M.adjustBruteLoss(-8 * removed * reagent_strength)
- M.adjustFireLoss(-8 * removed * reagent_strength)
- M.adjustToxLoss(2 * removed)
- M.add_chemical_effect(CE_PULSE, 1)
- if(prob(10))
- to_chat(M, span("warning", "Your muscles spasm and you find yourself unable to stand!"))
- M.Weaken(3)
/datum/reagent/cryoxadone
name = "Cryoxadone"
@@ -542,7 +513,6 @@
M.adjustToxLoss(115 * removed) // Tested numbers myself
else
M.apply_radiation(-70 * removed)
- M.adjustToxLoss(-10 * removed)
if(prob(60))
M.take_organ_damage(4 * removed, 0)
@@ -1348,7 +1318,7 @@
M.adjustCloneLoss(-20 * removed)
M.adjustOxyLoss(-2 * removed)
M.heal_organ_damage(20 * removed, 20 * removed)
- M.adjustToxLoss(-20 * removed)
+ M.adjustToxLoss(-1 * removed)
if(dose > 3)
M.status_flags &= ~DISFIGURED
if(dose > 10)
diff --git a/html/changelogs/mattatlas-nerfmed.yml b/html/changelogs/mattatlas-nerfmed.yml
new file mode 100644
index 00000000000..b17507a4e4f
--- /dev/null
+++ b/html/changelogs/mattatlas-nerfmed.yml
@@ -0,0 +1,43 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: MattAtlas
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Roller beds now have integrated IVs."
+ - rscdel: "Atropine has been removed."
+ - tweak: "Most random chemicals that healed organ damage - like tea - no longer do so. Rest assured though, medical chemicals that heal organ damage still do."
diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi
index 984e5041d5e..7100e6da290 100644
Binary files a/icons/obj/rollerbed.dmi and b/icons/obj/rollerbed.dmi differ