diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm index a23e4700e9e..692807c0fd3 100644 --- a/code/__DEFINES/movespeed_modification.dm +++ b/code/__DEFINES/movespeed_modification.dm @@ -14,6 +14,8 @@ #define MOVESPEED_ID_HUNTER_DISGUISE "HUNTER_DISGUISE" #define MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED "MOB_WALK_RUN" +#define MOVESPEED_ID_MOB_PARACETAMOL_SPEED "MOB_PARACETAMOL_RUN" +#define MOVESPEED_ID_MOB_NANITES_SPEED "MOB_NANITES_RUN" #define MOVESPEED_ID_MOB_GRAB_STATE "MOB_GRAB_STATE" #define MOVESPEED_ID_CONFIG_SPEEDMOD "MOB_CONFIG_MODIFIER" diff --git a/code/game/objects/machinery/vending/vending_types.dm b/code/game/objects/machinery/vending/vending_types.dm index ba371e352cd..11121ad1f49 100644 --- a/code/game/objects/machinery/vending/vending_types.dm +++ b/code/game/objects/machinery/vending/vending_types.dm @@ -200,7 +200,6 @@ /obj/item/reagent_containers/glass/bottle/oxycodone = 6, /obj/item/reagent_containers/glass/bottle/sleeptoxin = 6, /obj/item/reagent_containers/glass/bottle/polyhexanide = 6, - /obj/item/reagent_containers/glass/bottle/medicalnanites = 12, ), "Chemistry Equipment" = list( /obj/item/reagent_containers/syringe = -1, diff --git a/code/modules/reagents/reagents/medical.dm b/code/modules/reagents/reagents/medical.dm index 0ee878b84b5..8ef9b7da109 100644 --- a/code/modules/reagents/reagents/medical.dm +++ b/code/modules/reagents/reagents/medical.dm @@ -57,7 +57,7 @@ scannable = TRUE custom_metabolism = REAGENTS_METABOLISM * 0.125 purge_list = list(/datum/reagent/toxin, /datum/reagent/zombium) - purge_rate = 3 + purge_rate = 5 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL @@ -94,13 +94,20 @@ overdose_threshold = REAGENTS_OVERDOSE*2 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL*2 + /datum/reagent/medicine/paracetamol/on_mob_life(mob/living/L, metabolism) L.reagent_pain_modifier += PAIN_REDUCTION_HEAVY L.heal_overall_damage(0.5*effect_str, 0.5*effect_str) - L.adjustToxLoss(-0.1*effect_str) + L.adjustToxLoss(-1.5*effect_str) L.adjustStaminaLoss(-effect_str) + L.adjustDrowsyness(-0.5 SECONDS) + L.AdjustUnconscious(-1 SECONDS) + L.AdjustStun(-1 SECONDS) + L.AdjustParalyzed(-1 SECONDS) + L.add_movespeed_modifier(MOVESPEED_ID_MOB_PARACETAMOL_SPEED, TRUE, 0, NONE, TRUE, 100) return ..() + /datum/reagent/medicine/paracetamol/overdose_process(mob/living/L, metabolism) L.hallucination = max(L.hallucination, 2) L.reagent_pain_modifier += PAIN_REDUCTION_VERY_LIGHT @@ -109,6 +116,9 @@ /datum/reagent/medicine/paracetamol/overdose_crit_process(mob/living/L, metabolism) L.apply_damage(3*effect_str, TOX) +/datum/reagent/medicine/paracetamol/on_mob_delete(mob/living/L, metabolism) + L.remove_movespeed_modifier(MOVESPEED_ID_MOB_PARACETAMOL_SPEED) + /datum/reagent/medicine/tramadol name = "Tramadol" description = "A simple, yet effective painkiller." @@ -224,8 +234,8 @@ description = "Kelotane is a drug used to treat burns." color = COLOR_REAGENT_KELOTANE scannable = TRUE - purge_list = list(/datum/reagent/medicine/ryetalyn) - purge_rate = 1 + purge_list = list(/datum/reagent/medicine/ryetalyn,) + purge_rate = 1.5 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL @@ -300,21 +310,19 @@ name = "Dexalin" description = "Dexalin is used in the treatment of oxygen deprivation." color = COLOR_REAGENT_DEXALIN - custom_metabolism = REAGENTS_METABOLISM * 2.5 - overdose_threshold = REAGENTS_OVERDOSE * 0.5 // 15 - overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL * 0.6 // 30 - purge_list = list(/datum/reagent/medicine/synaptizine) - purge_rate = 1 + overdose_threshold = REAGENTS_OVERDOSE + overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL scannable = TRUE /datum/reagent/medicine/dexalin/on_mob_life(mob/living/L,metabolism) L.adjustOxyLoss(-3*effect_str) - L.adjustStaminaLoss(-2*effect_str) holder.remove_reagent("lexorin", effect_str) return ..() +/* RUTGMC - MOVED TO MODULE /datum/reagent/medicine/dexalin/overdose_process(mob/living/L, metabolism) - L.apply_damage(2 * effect_str, BURN) + L.apply_damage(effect_str, TOX) +*/ /datum/reagent/medicine/dexalin/overdose_crit_process(mob/living/L, metabolism) L.apply_damages(2*effect_str, 0, 2*effect_str) @@ -332,15 +340,6 @@ holder.remove_reagent("lexorin", effect_str) return ..() -/datum/reagent/medicine/dexalinplus/on_mob_add(mob/living/L, metabolism) - if(TIMER_COOLDOWN_CHECK(L, name)) - return - L.adjustStaminaLoss(-100*effect_str) - to_chat(L, span_userdanger("You feel a complete lack of fatigue, so relaxing!")) - -/datum/reagent/medicine/dexalinplus/on_mob_delete(mob/living/L, metabolism) - TIMER_COOLDOWN_START(L, name, 180 SECONDS) - /datum/reagent/medicine/dexalinplus/overdose_process(mob/living/L, metabolism) L.apply_damage(effect_str, TOX) @@ -456,7 +455,7 @@ overdose_threshold = REAGENTS_OVERDOSE/5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/5 scannable = TRUE - custom_metabolism = REAGENTS_METABOLISM * 1.5 + custom_metabolism = REAGENTS_METABOLISM * 0.5 purge_list = list(/datum/reagent/toxin/mindbreaker) purge_rate = 5 @@ -483,65 +482,18 @@ L.adjustStaminaLoss(15*effect_str) return ..() +/* RUTGMC - MOVED TO MODULE /datum/reagent/medicine/synaptizine/overdose_process(mob/living/L, metabolism) - L.apply_damage(2 * effect_str, TOX) + L.apply_damage(effect_str, TOX) /datum/reagent/medicine/synaptizine/overdose_crit_process(mob/living/L, metabolism) - L.apply_damages(2 * effect_str, 2 * effect_str, 3 * effect_str) + L.apply_damages(effect_str, effect_str, effect_str) +*/ /datum/reagent/medicine/synaptizine/on_mob_delete(mob/living/L, metabolism) to_chat(L, span_userdanger("The room spins as you start to come down off your stimulants!")) TIMER_COOLDOWN_START(L, name, 60 SECONDS) -///ADRENALINE, basically old synaptizine with buffs? -/datum/reagent/medicine/adrenaline - name = "Adrenaline" - description = "Gotta go fast!" - color = "#f14a17" - overdose_threshold = REAGENTS_OVERDOSE/5 - overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL/5 - scannable = TRUE - custom_metabolism = REAGENTS_METABOLISM * 0.5 - purge_rate = 5 - -/datum/reagent/medicine/adrenaline/on_mob_add(mob/living/carbon/human/L, metabolism) - if(TIMER_COOLDOWN_CHECK(L, name)) - return - L.adjustStaminaLoss(-30 * effect_str) - to_chat(L, span_userdanger("You feel a burst of energy as the adrenaline courses through you! Time to go fast!")) - - if(L.health < L.health_threshold_crit && volume >= 3) - to_chat(L, span_userdanger("Heart explosion! Power flows through your veins!")) - L.adjustBruteLoss(-L.getBruteLoss(TRUE) * 0.40) - L.jitter(5) - -/datum/reagent/medicine/adrenaline/on_mob_life(mob/living/L, metabolism) - L.reagent_shock_modifier += PAIN_REDUCTION_MEDIUM - L.adjustDrowsyness(-0.5 SECONDS) - L.AdjustUnconscious(-2 SECONDS) - L.AdjustStun(-2 SECONDS) - L.AdjustParalyzed(-2 SECONDS) - L.adjustToxLoss(0.8 * effect_str) - L.hallucination = max(0, L.hallucination - 10) - switch(current_cycle) - if(1 to 10) - L.adjustStaminaLoss(-7.5 * effect_str) - if(11 to 40) - L.adjustStaminaLoss((current_cycle*0.75 - 14)*effect_str) - if(41 to INFINITY) - L.adjustStaminaLoss(15 * effect_str) - return ..() - -/datum/reagent/medicine/adrenaline/overdose_process(mob/living/L, metabolism) - L.apply_damage(effect_str, TOX) - -/datum/reagent/medicine/adrenaline/overdose_crit_process(mob/living/L, metabolism) - L.apply_damages(effect_str, effect_str, effect_str) - -/datum/reagent/medicine/adrenaline/on_mob_delete(mob/living/L, metabolism) - to_chat(L, span_userdanger("The room spins as your adrenaline starts to wear off!")) - TIMER_COOLDOWN_START(L, name, 60 SECONDS) - /datum/reagent/medicine/neuraline //injected by neurostimulator implant and medic-only injector name = "Neuraline" description = "A chemical cocktail tailored to enhance or dampen specific neural processes." @@ -677,7 +629,11 @@ /datum/reagent/medicine/alkysine/on_mob_life(mob/living/L, metabolism) L.reagent_shock_modifier += PAIN_REDUCTION_VERY_LIGHT - L.adjustBrainLoss(-1.5*effect_str) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + var/datum/internal_organ/brain/B = H.internal_organs_by_name["brain"] + if(B.damage < 30) + L.adjustBrainLoss(-1.5*effect_str) L.adjust_ear_damage(-2 * effect_str, -2 * effect_str) return ..() @@ -702,7 +658,7 @@ if(ishuman(L)) var/mob/living/carbon/human/H = L var/datum/internal_organ/eyes/E = H.internal_organs_by_name["eyes"] - if(E) + if(E.damage < 30) E.heal_organ_damage(effect_str) return ..() @@ -744,8 +700,8 @@ name = "Bicaridine" description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma." color = COLOR_REAGENT_BICARIDINE - purge_list = list(/datum/reagent/medicine/ryetalyn) - purge_rate = 1 + purge_list = list(/datum/reagent/medicine/ryetalyn, /datum/reagent/medicine/research/medicalnanites) + purge_rate = 1.5 overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL scannable = TRUE @@ -1095,8 +1051,6 @@ overdose_threshold = REAGENTS_OVERDOSE overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL scannable = TRUE - purge_list = list(/datum/reagent/medicine/xenojelly) - purge_rate = 5 /datum/reagent/medicine/spaceacillin/overdose_process(mob/living/L, metabolism) L.apply_damage(effect_str, TOX) @@ -1134,8 +1088,6 @@ custom_metabolism = REAGENTS_METABOLISM * 0.5 overdose_threshold = REAGENTS_OVERDOSE * 0.5 overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL * 0.5 - purge_list = list(/datum/reagent/medicine/xenojelly) - purge_rate = 5 scannable = TRUE /datum/reagent/medicine/larvaway/on_mob_life(mob/living/L, metabolism) @@ -1349,7 +1301,17 @@ scannable = TRUE taste_description = "metal, followed by mild burning" overdose_threshold = REAGENTS_OVERDOSE * 1.2 //slight buffer to keep you safe - overdose_crit_threshold = REAGENTS_OVERDOSE_CRITICAL * 1.7 + purge_list = list( + /datum/reagent/medicine/bicaridine, + /datum/reagent/medicine/kelotane, + /datum/reagent/medicine/tramadol, + /datum/reagent/medicine/oxycodone, + /datum/reagent/medicine/tricordrazine, + /datum/reagent/medicine/paracetamol, + /datum/reagent/medicine/russian_red, + ) + purge_rate = 5 +var/mob/living/carbon/human/host /datum/reagent/medicine/research/medicalnanites/on_mob_add(mob/living/L, metabolism) to_chat(L, span_userdanger("You feel like you should stay near medical help until this shot settles in.")) @@ -1369,32 +1331,35 @@ if(volume < 30) //smol injection will self-replicate up to 30u using 240u of blood. L.reagents.add_reagent(/datum/reagent/medicine/research/medicalnanites, 0.15) L.blood_volume -= 2 + L.adjust_slowdown(0.1) if(volume < 35) //allows 10 ticks of healing for 20 points of free heal to lower scratch damage bloodloss amounts. L.reagents.add_reagent(/datum/reagent/medicine/research/medicalnanites, 0.1) if (volume > 5 && L.getBruteLoss(organic_only = TRUE)) - L.heal_overall_damage(2*effect_str, 0) - L.adjustToxLoss(0.1*effect_str) + L.heal_overall_damage(1.9*effect_str, 0) holder.remove_reagent(/datum/reagent/medicine/research/medicalnanites, 0.5) if(prob(40)) to_chat(L, span_notice("Your cuts and bruises begin to scab over rapidly!")) if (volume > 5 && L.getFireLoss(organic_only = TRUE)) - L.heal_overall_damage(0, 2*effect_str) - L.adjustToxLoss(0.1*effect_str) + L.heal_overall_damage(0, 1.9*effect_str) holder.remove_reagent(/datum/reagent/medicine/research/medicalnanites, 0.5) - if(prob(40)) - to_chat(L, span_notice("Your burns begin to slough off, revealing healthy tissue!")) - return ..() + if(prob(40)) to_chat(L, span_notice("Your burns begin to slough off, revealing healthy tissue!")) + + if(prob(80)) + for(var/datum/limb/limb_to_fix AS in host.limbs) + if(limb_to_fix.limb_status & (LIMB_BROKEN | LIMB_SPLINTED | LIMB_STABILIZED)) + if(!(prob(80) || limb_to_fix.brute_dam > limb_to_fix.min_broken_damage)) + continue + limb_to_fix.remove_limb_flags(LIMB_BROKEN | LIMB_SPLINTED | LIMB_STABILIZED) + limb_to_fix.add_limb_flags(LIMB_REPAIRED) + break /datum/reagent/medicine/research/medicalnanites/overdose_process(mob/living/L, metabolism) L.adjustToxLoss(effect_str) //softcap VS injecting massive amounts of medical nanites for the healing factor with no downsides. Still doable if you're clever about it. holder.remove_reagent(/datum/reagent/medicine/research/medicalnanites, 0.25) -/datum/reagent/medicine/research/medicalnanites/overdose_crit_process(mob/living/L, metabolism) - L.adjustCloneLoss(1) //YUM! - /datum/reagent/medicine/research/medicalnanites/on_mob_delete(mob/living/L, metabolism) to_chat(L, span_userdanger("Your nanites have been fully purged! They no longer affect you."))