diff --git a/code/__DEFINES/chemistry.dm b/code/__DEFINES/chemistry.dm index 078ccbdc2d94..949a2bf04c6a 100644 --- a/code/__DEFINES/chemistry.dm +++ b/code/__DEFINES/chemistry.dm @@ -5,7 +5,7 @@ /// Amount of random icon variations for pills in total #define PILL_ICON_CHOICES 21 /* Pill icon classes to generate mappings for */ -#define PILL_ICON_CLASSES list("bica", "kelo", "dex", "para", "tram", "atox", "tox", "inap", "peri", "spac", "drug", "stim", "alky", "imi", "qc", "tric", "psych", "oxy") +#define PILL_ICON_CLASSES list("bica", "kelo", "dex", "para", "tram", "atox", "tox", "inap", "peri", "spac", "drug", "stim", "alky", "imi", "qc", "tric", "psych", "oxy", "ipe") /* reagents defines diff --git a/code/game/machinery/vending/vendor_types/medical.dm b/code/game/machinery/vending/vendor_types/medical.dm index ab1df0b2abb7..63c6549d9b2a 100644 --- a/code/game/machinery/vending/vendor_types/medical.dm +++ b/code/game/machinery/vending/vendor_types/medical.dm @@ -503,6 +503,7 @@ list("Pill Bottle (Kelotane)", floor(scale * 4), /obj/item/storage/pill_bottle/kelotane, VENDOR_ITEM_REGULAR), list("Pill Bottle (Peridaxon)", floor(scale * 3), /obj/item/storage/pill_bottle/peridaxon, VENDOR_ITEM_REGULAR), list("Pill Bottle (Tramadol)", floor(scale * 4), /obj/item/storage/pill_bottle/tramadol, VENDOR_ITEM_REGULAR), + list("Pill Packet (Ipecac)", floor(scale * 4), /obj/item/storage/pill_bottle/packet/ipecac, VENDOR_ITEM_REGULAR), list("MEDICAL UTILITIES", -1, null, null), list("Emergency Defibrillator", floor(scale * 3), /obj/item/device/defibrillator, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/items/reagent_containers/pill.dm b/code/game/objects/items/reagent_containers/pill.dm index 6c71d8be3c0c..11b7249695b9 100644 --- a/code/game/objects/items/reagent_containers/pill.dm +++ b/code/game/objects/items/reagent_containers/pill.dm @@ -269,3 +269,8 @@ /obj/item/reagent_container/pill/stimulant pill_initial_reagents = list("antag_stimulant" = 10) pill_icon_class = "stim" + +/obj/item/reagent_container/pill/ipecac + pill_desc = "An Ipecac pill. Used to induce vomiting to eject toxic substances." + pill_initial_reagents = list("ipecac" = 10) + pill_icon_class = "ipe" diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index f9f5983c925d..a4c1782b38ec 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -789,3 +789,9 @@ icon_state = "oxycodone_packet" desc = "This packet contains oxycodone pills. A highly effective painkiller. Once you take them out, they don't go back in. Don't take more than 1 pill in a short period." pill_type_to_fill = /obj/item/reagent_container/pill/oxycodone + +/obj/item/storage/pill_bottle/packet/ipecac + name = "ipecac pill packet" + icon_state = "ipecac_packet" + desc = "This packet contains ipecac pills. A fast acting emetic. Once you take them out, they don't go back in." + pill_type_to_fill = /obj/item/reagent_container/pill/ipecac diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6db31ea6451a..384b7dd9e543 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -880,8 +880,8 @@ if(!lastpuke) lastpuke = 1 to_chat(src, SPAN_WARNING("You feel nauseous...")) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), src, "You feel like you are about to throw up!"), 15 SECONDS) - addtimer(CALLBACK(src, PROC_REF(do_vomit)), 25 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), src, "You feel like you are about to throw up!"), 10 SECONDS) + addtimer(CALLBACK(src, PROC_REF(do_vomit)), 15 SECONDS) /mob/living/carbon/human/proc/do_vomit() apply_effect(5, STUN) @@ -894,9 +894,13 @@ if(istype(location, /turf)) location.add_vomit_floor(src, 1) + if(length(reagents.reagent_list)) + for(var/datum/reagent/ingested_chem as anything in reagents.reagent_list) + ingested_chem.volume = (ingested_chem.volume * 0.7) + nutrition -= 40 apply_damage(-3, TOX) - addtimer(VARSET_CALLBACK(src, lastpuke, FALSE), 35 SECONDS) + addtimer(VARSET_CALLBACK(src, lastpuke, FALSE), 15 SECONDS) /mob/living/carbon/human/proc/get_visible_gender() if(wear_suit && wear_suit.flags_inv_hide & HIDEJUMPSUIT && ((head && head.flags_inv_hide & HIDEMASK) || wear_mask)) @@ -1707,15 +1711,15 @@ /mob/living/carbon/human/on_knockedout_trait_gain(datum/source) . = ..() - + update_execute_hud() - + return . /mob/living/carbon/human/on_knockedout_trait_loss(datum/source) . = ..() update_execute_hud() - + return . - + diff --git a/code/modules/reagents/chemistry_properties/prop_neutral.dm b/code/modules/reagents/chemistry_properties/prop_neutral.dm index da0cc0c6054f..be65333f0006 100644 --- a/code/modules/reagents/chemistry_properties/prop_neutral.dm +++ b/code/modules/reagents/chemistry_properties/prop_neutral.dm @@ -381,7 +381,7 @@ category = PROPERTY_TYPE_IRRITANT /datum/chem_property/neutral/emetic/process(mob/living/M, potency = 1, delta_time) - if(prob(0.5 * holder.volume * potency * delta_time) && ishuman(M)) + if(prob(2.5 * holder.volume * potency * delta_time) && ishuman(M)) var/mob/living/carbon/human/H = M H.vomit() //vomit() already has a timer on in diff --git a/code/modules/reagents/chemistry_reagents/medical.dm b/code/modules/reagents/chemistry_reagents/medical.dm index 1e9eb0e0084b..7a37b63a34d3 100644 --- a/code/modules/reagents/chemistry_reagents/medical.dm +++ b/code/modules/reagents/chemistry_reagents/medical.dm @@ -411,3 +411,12 @@ custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS) data = 0 properties = list(PROPERTY_CURING = 2) + +/datum/reagent/medical/ipecac + name = "Ipecac" + id = "ipecac" + description = "A rapid acting emetic made from the ipecacuanha plant." + reagent_state = LIQUID + color = "#DEAD00" + data = 0 + properties = list(PROPERTY_EMETIC = 1) diff --git a/icons/obj/items/chemistry.dmi b/icons/obj/items/chemistry.dmi index e540af809714..2cfdff1de8a2 100644 Binary files a/icons/obj/items/chemistry.dmi and b/icons/obj/items/chemistry.dmi differ