From 59d64632359a9f3088da98bc2168ca1687322824 Mon Sep 17 00:00:00 2001 From: Matt Atlas Date: Mon, 8 Jun 2020 11:32:25 +0200 Subject: [PATCH] Roller bed IVs, tea nerf, atropine removal. (#9029) --- .../structures/stool_bed_chair_nest/bed.dm | 180 ++++++++++++------ .../Chemistry-Reagents-Food-Drinks.dm | 36 ---- .../Chemistry-Reagents-Medicine.dm | 32 +--- html/changelogs/mattatlas-nerfmed.yml | 43 +++++ icons/obj/rollerbed.dmi | Bin 2584 -> 2998 bytes 5 files changed, 170 insertions(+), 121 deletions(-) create mode 100644 html/changelogs/mattatlas-nerfmed.yml 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 984e5041d5efa0a4798f32feb8586e11b6643123..7100e6da2900473ecf59f3dd9f5dfbc4d07affeb 100644 GIT binary patch literal 2998 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